K210視覺識別模塊學習筆記3:內存卡寫入拍攝圖片_LED三色燈的操作_按鍵操作_定時器的配置使用

今日開始學習K210視覺識別模塊:

LED三色燈的操作_按鍵操作_定時器的配置使用_內存卡寫入拍攝圖片

亞博智能的K210視覺識別模塊......??

本文最終目的是編寫一個按鍵拍照的例程序:

為以后的專用場景的模型訓練做準備,因為訓練自己的模型需要大量的圖片,并人工標注

圖片的來源最好是K210自己拍攝的,(其他設備拍也行):

我個人認為這樣訓練出的模型會更貼合K210自身的實際識別場景,并且基礎像素不會太高(現在手機像素動不動就破一億,會給簡單的識別運算增加負擔)

文章提供測試代碼講解、完整代碼貼出、測試效果圖

目錄

LED三色燈的操作使用:

代碼測試效果:

按鍵的操作使用:

代碼測試效果:

定時器定時中斷的配置使用:

定時器配置相關函數介紹:

編寫例程序:

代碼測試效果:

按鍵寫入照片到TF內存卡:

本部分實現功能:

代碼編寫:

代碼測試結果:


LED三色燈的操作使用:

本段實驗目的:

開啟LED三色顯示 使用系統延時......

LED每隔一秒切換顏色點亮,并用串口打印當前點亮顏色情況

該例程序告訴我們如何import RGB三色燈的庫頭文件以及每個顏色燈的設置參數:

time.sleep(1)表示 系統延時一秒:

from modules import ybrgb
import time
RGB = ybrgb() #RGB = ybrgb()能夠成功創建一個RGB LED控制對象while True:
#RGB.set(r, g, b)函數能夠正確接收三個參數(紅色、綠色、藍色的亮度值,范圍通常是0-255),并控制RGB LED燈的顏色。RGB.set(1, 0, 0)print("RED")time.sleep(1)RGB.set(0, 1, 0)print("GREEN")time.sleep(1)RGB.set(0, 0, 1)print("BLUE")time.sleep(1)RGB.set(1, 1, 1)print("WHITE")time.sleep(1)RGB.set(0, 0, 0)print("BLack")time.sleep(1)

代碼測試效果:

該段代碼可以直接放在IDE中進行測試:效果就是每個一秒進行LED循環切換顯示顏色:

紅、綠、藍、白、滅,并且串口同步發送當前顏色顯示情況:

按鍵的操作使用:

本段實驗目的:

按下一次按鍵后串口就打印一次提示

以下代碼展示了如何調用KEY的使用方法:

(與官方例程略有不同,添加了等待按鍵松開的循環)

from modules import ybkey
import timeKEY = ybkey()while True:state = KEY.is_press()if state != 0:print("key pressed")while KEY.is_press():  #等待按鍵松開time.sleep(0.01) time.sleep_ms(100) #消抖

代碼測試效果:

按鍵按下后串口會打印 "key pressed"

定時器定時中斷的配置使用:

定時器配置相關函數介紹:

1、先要import相關的庫:
from machine import Timer
import time
2、再創建Timer對象,并命名為timer,這里調用初始化的函數與解釋如下:
timer = machine.Timer(id, channel, mode=Timer.MODE_ONE_SHOT, period=1000,
unit=Timer.UNIT_MS, callback=None, arg=None, start=True, priority=1, div=0)
id :
Timer ID, [0~2] (Timer.TIMER0~TIMER2)
channel :
Timer 通道 , [Timer.CHANNEL0~Timer.CHANNEL3]
mode :
Timer 模式 , MODE_ONE_SHOT 或者 MODE_PERIODIC 或者 MODE_PWM
period :
Timer 周期 , 在啟動定時器后 period 時間, 回調函數將會被調用, (0,~)
unit :
設置周期的單位,默認位毫秒( ms ), Timer.UNIT_S 或者 Timer.UNIT_MS 或者 Timer.UNIT_US 或者 Timer.UNIT_NS
callback :
定時器回調函數, 定義了兩個參數, 一個是定時 器對象 Timer , 第二個是在定義對象是希望傳的參數 arg ,更多請看 arg 參數解釋
3、定時器回調函數:

#該函數是被Timer對象用作定時器到期時的回調,當定時器觸發時,該函數會被自動調用
def on_timer(timer):

編寫例程序:

from machine import Timer
import time#該函數是被Timer對象用作定時器到期時的回調,當定時器觸發時,該函數會被自動調用
def on_timer(timer):print("This is on_timer callback")# 創建一個周期為200毫秒的定時器  
timer = Timer(Timer.TIMER0, Timer.CHANNEL0,mode=Timer.MODE_PERIODIC, period=100,unit=Timer.UNIT_MS, callback=on_timer, arg=None)# 獲取當前的時間戳(以毫秒為單位)并存儲在last_time變量中 
last_time = time.ticks_ms()
try:while True:# 檢查從上一次記錄的時間到現在是否過去了至少200毫秒  if time.ticks_ms() - last_time >= 200:# 如果時間差大于等于200毫秒,則更新last_time為當前時間戳 last_time = time.ticks_ms()# 打印一條消息,表示主循環被執行print("This is main loop")# 捕獲所有異常(這是一個不推薦的做法,因為會捕獲所有的異常,包括意外的和未處理的異常)            
except:timer.deinit()# 刪除timer對象,釋放其占用的資源  del timer# 刪除timer對象,釋放其占用的資源

代碼測試效果:

串口測試效果展示:

定時器每打印倆次,主程序即打印一次

符合程序指定的:

定時器每100ms打印一次,主函數大于等于200ms打印一次的規律

按鍵寫入照片到TF內存卡:

有了之前的函數學習積累我們現在可以嘗試編寫python代碼來使得按鍵操作K210拍攝一張照片并寫入到TF內存卡

本部分實現功能:

1、LCD循環播放當前采集到的圖像,并在左上角顯示幀率

2、按下按鍵不動:

??????? 1)將當前拍攝的一張照片存到TF卡

??????? 2)點亮LED,閃白光,提示提取了當前的照片

??????? 3)停止畫面在當前采集到的照片

3、成功采集到一張照片還會有串口反饋

代碼編寫:

import time,sensor,lcd,image
from modules import ybkey
from modules import ybrgbRGB = ybrgb() #RGB = ybrgb()能夠成功創建一個RGB LED控制對象
KEY = ybkey() #按鍵控制對象
clock = time.clock() #用于計算攝像頭的幀率。lcd.init() # 初始化LCD顯示屏
sensor.reset() # 重置攝像頭傳感器
sensor.set_pixformat(sensor.RGB565)  # 設置攝像頭的像素格式為RGB565 # RGB565表示紅色使用5位,綠色使用6位,藍色使用5位來表示顏色  
sensor.set_framesize(sensor.QVGA)  # 設置攝像頭捕獲的圖像大小為QVGA(320x240像素) 
sensor.run(1) #用于啟動攝像頭傳感器并設置其工作模式
sensor.skip_frames(10) # 跳過攝像頭的前10幀,以便讓攝像頭穩定下來,避免初始化時的噪點 
print("init ok") #打印提示初始化完成base_path = "/sd/image-" # 設置圖片保存的基礎路徑和文件名前綴 
sequence_number = 1  # 初始序列號 while True:clock.tick()state = KEY.is_press()img = sensor.snapshot() # 使用sensor模塊的snapshot方法捕獲一幀圖像,并將其存儲在變量img中 fps = clock.fps() #計算攝像頭的幀率img.draw_string(0, 0, "%2.1ffps" %(fps), color=(0, 0, 255), scale=2.0)lcd.display(img)  #顯示最新捕獲的圖像在LCD上 if state != 0:img_path = base_path + str(sequence_number) + ".jpg"  # 生成文件名,如 "image-001.jpg" img = sensor.snapshot() # 使用sensor模塊的snapshot方法捕獲一幀圖像,并將其存儲在變量img中  img.save(img_path)    #使用img對象的save方法將圖像保存到指定的文件路徑 print("Saving image: {img_path}")sequence_number += 1  # 更新序列號while KEY.is_press(): #等待按鍵松開lcd.display(img)  #顯示最新捕獲的圖像在LCD上RGB.set(1, 1, 1)time.sleep(0.01) time.sleep_ms(50) #消抖RGB.set(0, 0, 0)

代碼測試結果:

拔出TF卡,插入讀卡器,插入電腦查看文件夾發現成功拍攝一系列照片并存入TF卡:

打開一張觀察發現像素不是很高:

?

IDE預覽鏡頭使用提示:

關閉IDE預覽鏡頭可以提示幀率!:
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19961.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19961.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19961.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jmeter基礎入門練習題

jmeter存在A,B兩個線程組的情況下,默認設置下,運行順序是:A A:A,B同時運行 B:先運行A,在運行B C:先運行A,等待2s運行B D:先A運行完,等待默認設置時間后運行B 下列說法正…

編譯安裝PHP服務(LAMP3)

目錄 1.初始化設置,將安裝PHP所需軟件包傳到/opt目錄下 (1)關閉防火墻 (2)上傳軟件包到/opt目錄 2.安裝GD庫和GD庫關聯程序,用來處理和生成圖片 3.配置軟件模塊 4.編譯及安裝 5.優化把PHP 的可執行程…

nginx的安裝001

Nginx是一款高性能的HTTP和反向代理服務器,以及郵件代理服務器,由 Igor Sysoev 開發并公開發布于2004年。Nginx以其高并發處理能力、低內存消耗和穩定性著稱,特別適合部署在高流量的網站上。 操作系統: CentOS Stream 9 安裝步驟…

【算法訓練 day44 分割等和子集】

目錄 一、分割等和子集-LeetCode 416思路實現代碼1.二維dp代碼2.一維dp代碼 問題總結 一、分割等和子集-LeetCode 416 Leecode鏈接: leetcode 416 文章鏈接: 代碼隨想錄 視頻鏈接: B站 給你一個 只包含正整數 的 非空 數組 nums 。請你判斷是否可以將這個數組分割成兩個子集&…

SQL入門教程,很詳細

SQL(Structured Query Language)是一種用于管理關系數據庫的標準語言。它被廣泛用于存儲、操作和檢索數據。在這篇文章中,我們將介紹SQL的基本概念和常用命令。 首先,我們需要了解SQL的基本結構。SQL語句通常由以下幾個部分組成&…

頭歌數據結構與算法課程設計易-算式運算的合法性

給定一個算式運算,算式由運算數、、-、、/、(、)組成,請編寫程序判斷該算式運算是否合法。如果合法,計算該算式的值。 輸入描述: 第一行輸入一個運算表達式 輸出描述: 如果表達式合法則計算其值,結果保留兩…

c語言之向文件讀寫數據塊

c語言需要向文件讀寫數據塊需要用到fread語句和fwrite語句 fread語句的語法格式 fread(butter,size,count,fp) butter:讀取的數據存入內存地址 size:讀取的字節大小 count:讀取數據的個數 fp:讀取的文件指針 fwrite語句語法格式 fwrite(butter,size,count,fp…

企業如何利用社交媒體二維碼做宣傳?提升品牌形象

和普通的二維碼不同,社交媒體二維碼可以通過一個二維碼鏈接企業的超過16的社交媒體渠道鏈接,包括:企業官網、小程序、公眾號、淘寶店鋪、抖音鏈接、小紅書鏈接、美團鏈接、餓了么鏈接…等等。掃描之后,可以在這個社交媒體二維碼界…

校園志愿者|基于SprinBoot+vue的校園志愿者管理系統(源碼+數據庫+文檔)

校園志愿者管理系統 目錄 基于SprinBootvue的校園志愿者管理系統 一、前言 二、系統設計 三、系統功能設計 1 系統功能模塊 2管理員功能 3志愿者功能 四、數據庫設計 五、核心代碼 六、論文參考 七、最新計算機畢設選題推薦 八、源碼獲取: 博主介紹&a…

采購訂單審批和取消例子

文章目錄 1 Introduction2 Example 1 Introduction This is a exmaple for releaseing po and reseting po. 2 Example DATA:lw_in TYPE zmms015,lw_out TYPE zmms015_out,lt_head LIKE TABLE OF ZMMT003_head,lw_head TYPE ZMMT003_head,lt_item TYPE zmmt003_item_t,lt…

12.RedHat認證-Linux文件系統(下)

12.RedHat認證-Linux文件系統(下) swap虛擬內存 我加一個硬盤做實驗sdc # 創建交換分區(不用做成邏輯卷也能靈活分區) [rootcentos8 ~]# fdisk /dev/sdc -l Disk /dev/sdc:10 GiB,10737418240 字節,20971520 個扇區 …

REX 521饋線保護繼電器提供 您的高效中壓網絡 保護、測量、監控和基本 控制功能

REX 521饋線保護繼電器提供 您的高效中壓網絡 保護、測量、監控和基本 控制功能。典型的REX 521應用包括輸入和輸出饋線 在隔離中性點中,諧振接地,牢固 接地和電阻接地系統。 …完善ABB繼電器解決方案系列 這種最先進的保護繼電器補充了ABB的一系列解決方…

深入理解linux文件系統與日志分析

深入理解linux文件系統與日志分析 linux文件系統: 文件是存儲在硬盤上的,硬盤上的最小存儲單位是扇區,每個扇區的大小是512字節。 inode:元信息(文件的屬性 權限,創建者,創建日期等等) block…

【AVL Design Explorer DOE】

AVL Design Explorer DOE 1、關于DOE的個人理解2、DOE參考資料-知乎2.1 DOE發展及基本類型2.2 DOE應用場景2.3 Mintab 中的 DOE工具3、AVL Design Explorer DOE示例 1、關于DOE的個人理解 仿真和試驗一樣,就像盲人摸象,在不知道大象的全景之前&#xff…

Java 垃圾回收

一、概述 GC GC(Garbage Collection),在程序運行過程中內存空間是有限的,為了更好的的使用有限的內存空間,GC會將不再使用的對象清除然后將其所占用的內存釋放出來。 java的垃圾回收機制 Java的垃圾收集(Garbage Collection, …

嵌入式Linux復制剪切刪除指令詳解

指令操作 1. cp 復制指令 a. 用法:cp [ 選項 ] [ 源文件或目錄 ] [ 目標文件或目錄 ]; b. 用途:用于復制文件或目錄; c. 通常情況下,復制的都不是空文件夾,所以直接使用 cp 復制空文件會失敗&#xff0…

創建Django項目及應用

1 創建Project 1個Project可以對應多個app django-admin startproject myproject 2 創建App python manage.py startapp app01 INSTALLED_APPS [# ...app01,app02,# ... ] 如果要讓這個應用在項目中起作用,需要在項目的 settings.py 文件的 INSTALLED_APPS 配置…

java中成員內部類、局部內部類、匿名內部類各自的特點

成員內部類:定義在類的內部,方法的外部,成員內部類作為外部類的成員,可以直接訪問外部類的私有屬性。 局部內部類:定義在方法的內部,對于局部內部類我們常常使用一個方法,得到一個接口實現類的…

臭氧濃度傳感器在食品廠與制藥廠中的應用

在食品廠和制藥廠的生產過程中,消毒是一個至關重要的環節。有效的消毒可以確保產品免受微生物污染,從而保障消費者的健康。近年來,臭氧作為一種廣譜殺菌劑,因其強效的消毒能力和低污染性,在食品廠和制藥廠的消毒過程中…

SpringMVC:創建一個簡單的SpringMVC框架

目錄 一、框架介紹 兩個重要的xml文件 SpringMVC執行流程 二、Vscode搭建SpringMVC框架 1、maven創建webapp原型項目 2、pom.xml下添加springmvc的相關依賴 3、在web.xml配置 4、springmvc.xml的配置 5、編寫Controller控制器類 6、 編寫JSP界面 7、項目結構圖 一…