OpenMV与PC通过串口进行图传-代码与视频演示

fanfan   ·   发表于 5个月前   ·   OpenMV电子积木


Attachment List

img_encode_and_decode.zip   File Size:0M (Download Count:8)

openmv_uart_video.zip   File Size:0.001M (Download Count:8)

pc_video_client.zip   File Size:0.001M (Download Count:11)

2 Reply   |  Until 5个月前 | 300 View

fanfan
发表于 2个月前

OpenMV视频流读取的代码一共3个文件,分别是:

文件1:img_encode_and_decode.py

'''
图片编码解码实验
此代码为测试代码

作者:fan
'''

import cv2
import numpy as np


img_path = 'screenshot-1.jpg'
img = cv2.imread(img_path, cv2.IMREAD_COLOR)

cv2.imshow('win',img)

ret,buffer = cv2.imencode('.jpg', img)

if ret:
    print(buffer)


img2 = cv2.imdecode(buffer, cv2.IMREAD_COLOR)
cv2.imshow('win2', img2)

cv2.waitKey(0)
cv2.destroyAllWindows()

文件2:openmv_uart_video.py

'''

【OpenMV】OpenMV 通过串口发送图片, 图片格式是JPEG
像素QQVGA的时候比较稳定  QVGA的时候会出现图像损坏的问题

作者:fan
'''

import sensor
import pyb
from pyb import UART
import utime

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)  #160*120
sensor.skip_frames()

uart = UART(3, 115200)

verify_code = b'\xFF\x00\xAA\xAE\xEA\xFF'

while(True):
    img = sensor.snapshot()

    pic = img.compress(quality=80)      #压缩后图片为jpeg格式
    print("sending imanage")
    uart.write(pic)
    print("sending verify code")
    uart.write(verify_code)

    # utime.sleep_ms(10)

文件3:pc_video_client.py

'''
解析jpg的字节流的数据,通过opencv读入图片
利用OpenCV的HighGUI实时获取OpenMV读取的图片


开发环境
    OS: Ubuntu 16.04
    Python: Python3.6
    OpenCV:3.4.1
作者:fan
'''
import serial
import struct
import time
import cv2 as cv
import numpy as np

# USB设备号 /dev/ttyUSB? 这里需要自行修改, Windows用户需要修改为COM?
ser_dev = '/dev/ttyUSB1'

IMG_MIN_BYTE = 1000 # 图片的最小字节数
IMG_MAX_BYTE = 10000

cv.namedWindow('image_win', flags=cv.WINDOW_NORMAL | cv.WINDOW_KEEPRATIO | cv.WINDOW_GUI_EXPANDED)

# 创建一个串口实例
ser = serial.Serial(ser_dev,115200, timeout=1, bytesize=8)

verify_code = b'\xFF\x00\xAA\xAE\xEA\xFF' # 尾部校验帧
verify_code_len = len(verify_code) # 校验帧的长度
count = 0

while True:
    byte_raw = ser.read_until(verify_code,size=IMG_MAX_BYTE)
    img_byte = byte_raw[:-1*verify_code_len] # 截取img字节 去除校验字段
    # print(img_byte)
    if len(byte_raw) < IMG_MIN_BYTE:
        print("ERROR: 图片字节数太少, 等待下一张图片")
        continue
    
    # 数据保存 直接写入文件系统
    # with open('tmp-fs-%d.jpg'%(count), 'wb') as f:
    #    f.write(img_byte)

    img_arr = np.fromstring(img_byte, np.uint8) # 数据转换为uint8的ndarray
    # img_list = [int(b) for b in img_byte] # 数据转换的另外一种方法
    # img_arr = np.array(img_list, np.uint8)

    img = cv.imdecode(img_arr, cv.IMREAD_COLOR) # 转换为img对象的ndarray格式的数据
    
    if img is None:
        print("ERROR: 图片解析失败")
        continue
    
    print("SUCCESS: 图片解析成功")

    # 通过opencv的highGUI写入, 代表图片正确读入
    # cv.imwrite('tmp-opencv-%d.jpg'%(count), img)
    # count += 1
    
    # 通过OpenCV的HighGUI组件展示
    cv.imshow('image_win', img)
    k = cv.waitKey(1)
    if k == ord('q'):
        break
    elif k == ord('s'):
        cv.imwrite('screenshot-%d.jpg'%(count), img)
        count += 1



评论列表

  • 加载数据中...

编写评论内容

fanfan
发表于 2个月前

OpenMV单个图片传输测试的代码一共2个文件,分别是:

文件1:openmv_uart_send_single_img.py

# Untitled - By: hasee - 周三 四月 11 2018

import sensor
import pyb
from pyb import UART

sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA)  #160*120
sensor.skip_frames()

uart = UART(3, 115200)

while(True):
    img = sensor.snapshot()
    print(img)
    '''
    uart.write("$")
    uart.write(str(img.width()))        #160
    uart.write(str(img.height()))       #120
    uart.write(str(img.format())+"$\n") #1/3
    '''
    pic = img.compress(quality=80)      #压缩后图片为jpeg格式
    print("start--------------")
    uart.write(pic)
    print("--------------OK")
    break


文件2:read_jpeg_bytes.py

import serial
import struct
import time

ser_dev = '/dev/ttyUSB0'

IMG_BYTE_LEN =  0


# 创建一个串口实例
ser = serial.Serial(ser_dev,115200, timeout=1, bytesize=8)

while True:
    byte_raw = ser.readall()
    print(byte_raw)
    
    if len(byte_raw) > 1000:
        with open('demo.jpeg', 'wb') as f:
            f.write(byte_raw)
        print("写入图片")
        break
    time.sleep(1)


评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content