라즈베리파이5랑 카메라모듈3으로
영어문자를 인식하는 영상을 찍고 저장하려고하는데
1. 영어문자가 인식이 안돼고 노이즈만 심함
2. 방금 찍은 영상이 30초였다면 한 5초만 저장됨
import pytesseract
from picamera2 import Picamera2
import cv2
import datetime
import tkinter as tk
from tkinter import messagebox
import re

# PiCamera2 설정
picam2 = Picamera2()
picam2.configure(picam2.create_video_configuration(main={"size": (320, 240)}))

# GUI 설정
root = tk.Tk()
root.title("Camera Control")

# 전역 변수 초기화
recording = False
out = None

def start_recording():
    global recording, out, picam2
    if not recording:
        recording = True
        picam2.start()
        output_filename = f"/home/pi/Desktop/video_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.mp4"
        fourcc = cv2.VideoWriter_fourcc(*'mp4v')
        out = cv2.VideoWriter(output_filename, fourcc, 10.0, (320, 240))
        record_video()
    else:
        messagebox.showinfo("Recording", "Recording is already in progress.")

def stop_recording():
    global recording, out, picam2
    if recording:
        recording = False
        out.release()
        picam2.stop()
        cv2.destroyAllWindows()
        messagebox.showinfo("Recording Stopped", "Video saved and camera stopped.")
    else:
        messagebox.showinfo("Recording", "Recording is not in progress.")

def record_video():
    global recording, out
    if recording:
        image = picam2.capture_array()
        image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

        # OCR 인식률을 높이기 위해 이미지 전처리 (흑백 변환 + 대비 조정)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        _, binary = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY)

        # OCR로 텍스트 인식 (영어만)
        text = pytesseract.image_to_string(binary, lang='eng', config='--psm 6')
       
        # 영어 알파벳과 공백만 남기고 나머지 문자 제거
        filtered_text = re.sub(r'[^A-Za-z\s]', '', text).strip()

        # 텍스트가 인식된 경우에만 화면에 표시
        if filtered_text:  # 인식된 텍스트가 있는 경우에만 표시
            cv2.putText(image, filtered_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2)

        cv2.imshow("English Character Recognition", image)
        out.write(image)
       
        if cv2.waitKey(1) & 0xFF == ord('q'):
            stop_recording()
       
        root.after(10, record_video)  # Continue recording with a short delay

# 버튼 추가
start_button = tk.Button(root, text="Start", command=start_recording)
start_button.pack(side="left", padx=10, pady=10)
stop_button = tk.Button(root, text="End", command=stop_recording)
stop_button.pack(side="right", padx=10, pady=10)

root.mainloop()

- dc official App