今日開始學習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_PWMperiod :Timer 周期 , 在啟動定時器后 period 時間, 回調函數將會被調用, (0,~)unit :設置周期的單位,默認位毫秒( ms ), Timer.UNIT_S 或者 Timer.UNIT_MS 或者 Timer.UNIT_US 或者 Timer.UNIT_NScallback :定時器回調函數, 定義了兩個參數, 一個是定時 器對象 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預覽鏡頭可以提示幀率!:
?