아마존에서 2000엔에 판매되는 JPEG 카메라의 동작 확인

13354 단어 Pythoncamera
아마존에서는 JPEG 인코더가 달린 카메라0.3M 픽셀 직렬 JPEG 카메라 모듈가 2천엔에 판매돼 우선 조작을 확인했다.
자세한 내용은 제조업체사이트 축소판 그림를 참조하십시오.
UART에서 명령 교환을 통해 사진 데이터를 얻을 수 있을 것 같습니다.

촬영 가능한 이미지


640x480

320x240

160x120

획득 시간


영상이 소요된 시간의 측정 결과를 얻는 것은 이런 느낌이다.
이미지 크기
타임
파일 크기
640x480
10.0초
60KB
320x240
3.42초
18KB
160x120
1.21초
6.8KB
전송 속도는 기본(최대)인 1152200bps이기 때문에 640x480의 이미지 크기를 제외하면 4.2초 정도의 각오가 필요하다. 그러나 JPEG이기 때문에 압축이 필요한 이미지에서는 파일 크기가 더 작고 얻는 시간도 짧아진다.

다음


고무+고무 카메라로 가볍게 사진을 찍을 수 있기 때문에 파이썬 사용 환경에서 일부러 이 카메라를 사용하는 것은 불가능하다.

동작 확인용 코드


UART는 Pyserial의 Python을 통해 쉽게 접근할 수 있으니 이런 느낌의 코드를 눌러주세요.
camera_reader.py
import sys
import time
import serial

class CameraReader:

    def __init__(self, dev):
        #self.ser = serial.Serial(dev, timeout=1, baudrate=115200)
        self.ser = serial.Serial(dev, timeout=1, baudrate=115200)

    def snapshot(self, mode):
        if mode < 1:
            mode = 1
        elif mode > 3:
            mode = 3
        d = bytes([0x55, 0x48, 0x00, 0x30+mode, 0x00, 0x02, 0x23])
        self.ser.write(d)
        s = self.ser.read(4)
        s = self.ser.read(10)
        data_length = (s[6] << 24) + (s[5] << 16) + (s[4] << 8) + s[3]
        packages = (s[8] << 8) + s[7]
        return data_length, packages

    def read_image(self, data_length, packages):
        d = b''
        for i in range(packages):
            cmd = bytes([0x55, 0x45, 0x00, ((i+1) & 0xFF), ((i+1) >> 8) & 0xFF, 0x23])
            self.ser.write(cmd)
            s = self.ser.read(4) # ack
            self.ser.read(3) # 'UF<ID>'
            self.ser.read(2) # package id
            s = self.ser.read(2) # len
            len = (s[1] << 8) + s[0]
            s = self.ser.read(len)
            d += s
            s = self.ser.read(2) # crc
        return d

    def close(self):
        self.ser.close()

if __name__ == '__main__':
    args = sys.argv
    if len(args) < 3:
        print("usage: {0} device output".format(args[0]))
        exit(0)

    mode = 3
    if len(args) > 3:
        mode = int(args[3])

    reader = CameraReader(args[1])
    start = time.time()
    a,b = reader.snapshot(mode)
    d = reader.read_image(a,b)
    elapsed_time = time.time() - start
    with open(args[2], "wb") as fout:
        fout.write(d)
    print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")

좋은 웹페이지 즐겨찾기