라즈베리파이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
댓글 0