中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何實現DIY照相機

發布時間:2022-01-13 10:36:27 來源:億速云 閱讀:135 作者:iii 欄目:互聯網科技

這篇“python如何實現DIY照相機”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python如何實現DIY照相機”文章吧。

    攝像頭(CAMERA或WEBCAM)又稱為電腦相機、電腦眼、電子眼等,是一種視頻輸入設備,被廣泛的運用于視頻會議,安防系統  、圖像采集系統、 環境監控 、工業現場過程控制 等方面。本實驗用TPYBoard  v102以及PTC06 串口攝像頭模塊DIY一個簡易的照相機。

python如何實現DIY照相機

    1.所用器材:
    l   TPYBoard v102  1塊
    l   PTC06 串口攝像頭模塊1個
    l   杜邦線若干
    l   TF卡1個
    l   下載數據線1條

    2.TPYBoard v102簡介:
    TPYBoardv102主控芯片采用STM32F405,M4的內核,168MHZ的最高運行速度,1024KB的Flash,192KB的RAM,內置SD卡槽,最大支持8G內存的內存卡。板載四個LED燈和一個加速度傳感器。TPYBoard v102板載30個通用GPIO接口、 2個SPI接口、2個CAN接口、2個I2C接口、 5個USART 接口、 2個ADC接口(精度12bit )、2個DAC接口、1個SWD接口。可與大部分常用傳感器模塊連接。


python如何實現DIY照相機

    3. PTC06 串口攝像頭模塊簡介:
    PTC06 串口攝像頭模塊是一款集圖像采集、拍攝控制、數據壓縮、串口傳輸于一體的工業級圖像采集處理模塊。其內置的高性能數字信號處理芯片實現了對原始圖像的高比例壓縮。產品圖像輸 出采用標準 JPEG 格式,可方便地兼容各種圖像處理軟件;采用 3 線制 TTL 電平 UART 通 信接口,可以方便地實現與單片機或其他微處理器連接。

    默認波特率為 115200,其它可選波特率有 9600,19200,38400 和 57600。

python如何實現DIY照相機


    其中對于串口控制拍照,讀取靜態圖片的應用中,只需要用到 GND,RX,TX,VCC 這 4 個信號線。 如果是要輸出模擬視頻的應用,才需要將 CVBS 信號。注意: TX 和 RX 是 3.3v 的 TTL 電平信號。

    4.接線方式:

python如何實現DIY照相機


    5.實驗步驟.
    基本原理:TPYboard v102 通過串口與串口攝像頭模塊(PTC06)進行連接,通過按鍵控制模塊進行拍照,并保存到TF卡中。上電后,等待ToyBoard v102板載綠燈亮起,說明攝像頭模塊初始化完畢,按一下USR鍵,控制攝像頭進行拍照,藍燈會閃爍,說明正在傳輸圖片數據,等待藍燈熄滅后,說明傳輸完畢。按一下rst鍵讓板子重新加載一下TF卡,打開TF卡就會看到一個新生成的jpeg文件。

    6.源代碼:

"""
#TPYBoard v102 驅動串口攝像頭PTC06 拍照并保存到TF卡
#------------------------------------------------------
#作者:山東蘿卜電子科技有限公司
#時間:2018年03月15日
"""

import pyb
from pyb import UART,Switch

"""
拍照的基本流程
--------------------
1.清空圖片緩存
2.發送拍照命令
3.獲取圖片的長度
4.根據長度讀取圖片數據

使用到的指令與返回的數據格式
-------------------------------
復位
0x56 0x00 0x26 0x00
返回
0x76 0x00 0x26 0x00 +DSP 版本信息+Init end
------------------------
清空圖片緩存 
0x56 0x00 0x36 0x01 0x02
返回
0x76 0x00 0x36 0x00 0x00
-------------------------
拍照命令
0x56 0x00 0x36 0x01 0x00
返回
0x76 0x00 0x36 0x00 0x00
--------------------------
讀所拍圖片的長度
56 00 34 01 00
返回
0x76 0x00 0x34 0x00 0x04 0x00 0x00 XX YY
(XX 為高位字節,YY 為低位字節)
--------------------------
讀取圖片數據
0x56 0x00 0x32 0x0C 0x00 0x0A 0x00 0x00 AA BB 0x00 0x00 XX YY 0x00 0xFF
AA BB:起始地址(先高位字節,后低位字節.必須是8的倍數)
XX YY:本次讀的數據長度(先高位字節,后低位字節)
返回
76 00 32 00 00 FF D8 ....... FF D9 76 00 32 00 00
(完整的JPEG 圖片文件是以 FF D8 開始 FF D9 結尾)
"""
#-----Command---------#
initcmd=b'\x56\x00\x26\x00' #復位指令
clearcmd=b'\x56\x00\x36\x01\x02' #清除緩存
photocmd=b'\x56\x00\x36\x01\x00' #拍照
lengthcmd=b'\x56\x00\x34\x01\x00' #獲取圖片長度
readcmd=b'\x56\x00\x32\x0C\x00\x0A\x00\x00' #獲取圖片數據
responseCmd=b'\x76\x00\x32\x00\x00'#返回的圖片數據固定頭和尾
#---------------------------------#
isFlag=0#標識是否初始化
isPhoto=0#標識是否發送拍照命令
num=1
f_name='/sd/photo%s.jpeg'#保存的文件名稱
nBytes=512#每次讀取的字節數
#---------------------------------#
uart=UART(4,115200,timeout=100)#串口4 TX-X1 RX-X2

#------將10進制轉為16進制字節數組--------#
def convert_Data(num):
    if num>255:
        num_h=hex(num)
        if len(num_h)<6:
            num_h_a=num_h[:3]
            num_h_b='0x'+num_h[3:]
        else:
            num_h_a=num_h[:4]
            num_h_b='0x'+num_h[4:]
        byte_num=bytes([int(num_h_a,16),int(num_h_b,16)])
    else:
        byte_num=b'\x00'+bytes([num])
    return byte_num
#---------------------------------
#函數名:get_photo
#描述:獲取圖片數據
#參數:起始地址、讀取長度
#返回:成功返回正常數據,失敗返回0
#---------------------------------/
def get_photo(add,readlen):
    global readcmd,responseCmd
    
    cmd=readcmd+add+b'\x00\x00'+readlen+b'\x00\xFF'
    uart.write(cmd)
    while uart.any()<=0:
        continue
    data=uart.read()
    #print('data:',data)
    #print('data[0:5]:',data[0:5])
    #print('data[-5:]:',data[-5:])
    if data[0:5]==responseCmd and data[-5:]==responseCmd:
        revdata=data[5:-5]
        print('revdata:',revdata)
    else:
        revdata=0
    return revdata
#---------------------------------
#函數名:test
#描述:USR按鍵的回調函數。
#按鍵每按1次拍照1次
#---------------------------------/
def test():
    global num,isPhoto
    pyb.delay(30)
    if(sw()):
        sw.callback(None)#正在獲取數據時 禁用回調
        isPhoto=0
        num+=1
        pyb.LED(3).on()
        #清除緩存
        uart.write(clearcmd)
#等待模塊上電完畢       
print('wait......')
pyb.delay(2800)
print('init start.......')
uart.write(initcmd)
sw=Switch()
sw.callback(test)
while True:
    if uart.any()>0:
        data=uart.read()
        print('revdata:',data)
        if isFlag==0:
            #說明接收的是復位后的信息
            if data==b'Init end\r\n':
                #復位完畢
                print('init ok.......')
                pyb.delay(2000)
                isFlag=1
                pyb.LED(2).on()
        else:
            if len(data)>=5:
                if data[0]==118:#0x76
                    if data[2]==54:#0x36
                        if isPhoto==0:
                            #清除緩存返回
                            print('-----clear buffer ok----')
                            isPhoto=1
                            uart.write(photocmd)
                        else:
                            #拍照返回
                            print('-----taking pictures ok----')
                            uart.write(lengthcmd)
                    if data[2]==52:#0x34
                        print('photo length:',data[7],'-',data[8])
                        tlen=data[7]*256+data[8]
                        t_c=tlen//nBytes
                        t_y=tlen%nBytes
                        add=0
                        #256=[0x01,0x00] 512=[0x02,0x00]
                        length=convert_Data(nBytes)
                        name=f_name % str(num)
                        print('filename:',name)
                        for i in range(0,t_c):
                            add=convert_Data(i*nBytes)
                            #每512字節寫一次
                            revdata=get_photo(add,length)
                            if revdata!=0:
                                f=open(name,'a')
                                f.write(revdata)
                                f.close()
                            pyb.LED(4).toggle()
                            print('-------------',i)
                            pyb.delay(100)
                        add=convert_Data(t_c*nBytes)    
                        revdata=get_photo(add,convert_Data(t_y))
                        if revdata!=0:
                            f=open(name,'a')
                            f.write(revdata)
                            f.close()
                        pyb.LED(3).off()
                        pyb.LED(4).off()
                        pyb.delay(100)
                        print('*========================================*')
                        sw.callback(test)
            else:
                print('-----data length error-----')

以上就是關于“python如何實現DIY照相機”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

韶关市| 凌源市| 伊宁县| 巩义市| 仁化县| 长乐市| 石楼县| 宁晋县| 阜平县| 台安县| 黑水县| 永嘉县| 墨玉县| 茶陵县| 江源县| 阳春市| 伽师县| 图们市| 镇宁| 井陉县| 北票市| 唐河县| 东乡| 额尔古纳市| 讷河市| 沁水县| 桦南县| 土默特左旗| 额济纳旗| 吉林省| 沽源县| 景泰县| 临西县| 平昌县| 怀化市| 开原市| 康定县| 荣成市| 麻栗坡县| 偃师市| 台中市|