주피터 노트북에서 실행
import cv2
import tkinter as tk
from PIL import Image, ImageTk
# 웹캠 프레임을 업데이트하는 함수
def update_frame():
ret, frame = cap.read()
if ret:
# OpenCV 이미지를 PIL 이미지로 변환
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)
# 레이블에 이미지 업데이트
video_label.imgtk = imgtk
video_label.configure(image=imgtk)
video_label.after(10, update_frame)
# tkinter 윈도우 설정
root = tk.Tk()
root.title("웹캠 화면")
# 웹캠 캡처 설정
cap = cv2.VideoCapture(0)
# 비디오 레이블 설정
video_label = tk.Label(root)
video_label.pack()
# 프레임 업데이트 시작
update_frame()
# tkinter 윈도우 실행
root.mainloop()
# 프로그램 종료 시 웹캠 해제
cap.release()
import cv2
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
def update_frame():
ret, frame = cap.read()
if ret:
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)
video_label.imgtk = imgtk
video_label.configure(image=imgtk)
video_label.after(10, update_frame)
# 사진 찍기 함수
def capture_photo():
ret, frame = cap.read()
if ret:
filepath = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg")])
if filepath:
cv2.imwrite(filepath, frame)
print("사진 저장 완료:", filepath)
root = tk.Tk()
root.title("웹캠 화면")
cap = cv2.VideoCapture(0)
video_label = tk.Label(root)
video_label.pack()
# 사진 찍기 버튼 추가
capture_button = tk.Button(root, text="사진 찍기", command=capture_photo)
capture_button.pack(side=tk.LEFT, padx=10, pady=10)
update_frame()
root.mainloop()
cap.release()
import cv2
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import threading
import time
recording = False
def update_frame():
ret, frame = cap.read()
if ret:
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)
video_label.imgtk = imgtk
video_label.configure(image=imgtk)
video_label.after(10, update_frame)
def capture_photo():
ret, frame = cap.read()
if ret:
filepath = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg")])
if filepath:
cv2.imwrite(filepath, frame)
print("사진 저장 완료:", filepath)
# 동영상 녹화 시작 함수
def start_recording():
global recording
if not recording:
recording = True
filepath = filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("MP4 files", "*.mp4")])
if filepath:
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(filepath, fourcc, 20.0, (640, 480))
def record():
while recording:
ret, frame = cap.read()
if ret:
out.write(frame)
time.sleep(0.05)
out.release()
print("동영상 저장 완료:", filepath)
threading.Thread(target=record).start()
root = tk.Tk()
root.title("웹캠 화면")
cap = cv2.VideoCapture(0)
video_label = tk.Label(root)
video_label.pack()
capture_button = tk.Button(root, text="사진 찍기", command=capture_photo)
capture_button.pack(side=tk.LEFT, padx=10, pady=10)
# 녹화 시작 버튼 추가
start_record_button = tk.Button(root, text="녹화 시작", command=start_recording)
start_record_button.pack(side=tk.LEFT, padx=10, pady=10)
update_frame()
root.mainloop()
cap.release()
import cv2
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import threading
import time
recording = False
def update_frame():
ret, frame = cap.read()
if ret:
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)
video_label.imgtk = imgtk
video_label.configure(image=imgtk)
video_label.after(10, update_frame)
def capture_photo():
ret, frame = cap.read()
if ret:
filepath = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg")])
if filepath:
cv2.imwrite(filepath, frame)
print("사진 저장 완료:", filepath)
def start_recording():
global recording
if not recording:
recording = True
filepath = filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("MP4 files", "*.mp4")])
if filepath:
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(filepath, fourcc, 20.0, (640, 480))
def record():
while recording:
ret, frame = cap.read()
if ret:
out.write(frame)
time.sleep(0.05)
out.release()
print("동영상 저장 완료:", filepath)
threading.Thread(target=record).start()
# 녹화 중지 함수
def stop_recording():
global recording
if recording:
recording = False
print("녹화 중지")
root = tk.Tk()
root.title("웹캠 화면")
cap = cv2.VideoCapture(0)
video_label = tk.Label(root)
video_label.pack()
capture_button = tk.Button(root, text="사진 찍기", command=capture_photo)
capture_button.pack(side=tk.LEFT, padx=10, pady=10)
start_record_button = tk.Button(root, text="녹화 시작", command=start_recording)
start_record_button.pack(side=tk.LEFT, padx=10, pady=10)
# 녹화 중지 버튼 추가
stop_record_button = tk.Button(root, text="녹화 중지", command=stop_recording)
stop_record_button.pack(side=tk.RIGHT, padx=10, pady=10)
update_frame()
root.mainloop()
cap.release()import cv2
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import threading
import time
recording = False
def update_frame():
ret, frame = cap.read()
if ret:
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)
video_label.imgtk = imgtk
video_label.configure(image=imgtk)
video_label.after(10, update_frame)
def capture_photo():
ret, frame = cap.read()
if ret:
filepath = filedialog.asksaveasfilename(defaultextension=".jpg", filetypes=[("JPEG files", "*.jpg")])
if filepath:
cv2.imwrite(filepath, frame)
print("사진 저장 완료:", filepath)
def start_recording():
global recording
if not recording:
recording = True
filepath = filedialog.asksaveasfilename(defaultextension=".mp4", filetypes=[("MP4 files", "*.mp4")])
if filepath:
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(filepath, fourcc, 20.0, (640, 480))
def record():
while recording:
ret, frame = cap.read()
if ret:
out.write(frame)
time.sleep(0.05)
out.release()
print("동영상 저장 완료:", filepath)
threading.Thread(target=record).start()
# 녹화 중지 함수
def stop_recording():
global recording
if recording:
recording = False
print("녹화 중지")
root = tk.Tk()
root.title("웹캠 화면")
cap = cv2.VideoCapture(0)
video_label = tk.Label(root)
video_label.pack()
capture_button = tk.Button(root, text="사진 찍기", command=capture_photo)
capture_button.pack(side=tk.LEFT, padx=10, pady=10)
start_record_button = tk.Button(root, text="녹화 시작", command=start_recording)
start_record_button.pack(side=tk.LEFT, padx=10, pady=10)
# 녹화 중지 버튼 추가
stop_record_button = tk.Button(root, text="녹화 중지", command=stop_recording)
stop_record_button.pack(side=tk.RIGHT, padx=10, pady=10)
update_frame()
root.mainloop()
cap.release()
!pip install ultralytics
import cv2
import tkinter as tk
from PIL import Image, ImageTk
import threading
from ultralytics import YOLO
# YOLO 모델 로드
model = YOLO('yolov8n.pt')
# tkinter 윈도우 설정
root = tk.Tk()
root.title("YOLOv8 실시간 사람 검출")
# 웹캠 캡처 설정
cap = cv2.VideoCapture(0)
# 사물 검출 상태를 저장하는 변수
detecting = False
# 웹캠 프레임을 업데이트하고 사람 검출하는 함수
def update_frame():
global detecting
ret, frame = cap.read()
if ret:
if detecting:
# YOLO 모델로 사람 검출
results = model(frame)
for result in results:
boxes = result.boxes.cpu().numpy()
for box in boxes:
# 검출된 객체가 사람일 경우에만 표시 (label이 'person'인 경우)
if int(box.cls[0]) == 0: # 0은 'person' 클래스 번호
x1, y1, x2, y2 = map(int, box.xyxy[0])
label = result.names[int(box.cls[0])] # 클래스 ID를 이름으로 변환
# 사람 텍스트와 사각형 박스를 그리기
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
# OpenCV 이미지를 PIL 이미지로 변환
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)
# 레이블에 이미지 업데이트
video_label.imgtk = imgtk
video_label.configure(image=imgtk)
video_label.after(10, update_frame)
# 사물 검출 시작 및 중지 함수
def toggle_detection():
global detecting
detecting = not detecting
if detecting:
detection_button.config(text="사물 검출 중지")
print("사물 검출 시작")
else:
detection_button.config(text="사물 검출 시작")
print("사물 검출 중지")
# 비디오 레이블 설정
video_label = tk.Label(root)
video_label.pack()
# 사물 검출 버튼 설정
detection_button = tk.Button(root, text="사물 검출 시작", command=toggle_detection)
detection_button.pack(padx=10, pady=10)
# 프레임 업데이트 시작
update_frame()
# tkinter 윈도우 실행
root.mainloop()
# 프로그램 종료 시 웹캠 해제
cap.release()
pip install deepface
pip install tf-keras