Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 데이터분석가
- loop 문
- 불순도제거
- 회귀분석 알고리즘
- 데이터분석
- 정보획득량
- Intersect
- 총과 카드만들기
- 팀스파르타
- 상관관계
- Sum
- difftime
- 순위출력
- max
- sql
- merge
- 그래프 생성 문법
- sqld
- %in%
- 그래프시각화
- 빅데이터
- count
- 여러 데이터 검색
- Dense_Rank
- 빅데이터분석
- if문 작성법
- 단순회귀 분석
- 막대그래프
- 회귀분석
- 히스토그램 그리기
Archives
- Today
- Total
ch0nny_log
[빅데이터분석] 딥러닝_17.영상 속에서 사물인식하기 본문
https://cafe.daum.net/oracleoracle/SpOP/370
지금 하는 내용은 1000개의 클래스를 인식하는 신경망을 이용해서 사진과 영상에서 사물 검출을 해 볼 겁니다.
1. google drive에 인식할 파일을 넣고 마운트하기
from google.colab import drive
drive.mount('/content/drive')
2. 필요 모듈 설치
pip install ultralytics
3. 사물 탐지 수행 후 office3_detected 결과 저장
from ultralytics import YOLO
import cv2
import matplotlib.pyplot as plt
# YOLOv8 모델 로드 (YOLOv8n, YOLOv8s, YOLOv8m, YOLOv8l, YOLOv8x 등 다양한 모델 크기 선택 가능)
model = YOLO('yolov8n.pt') # 'yolov8n.pt'는 YOLOv8 nano 모델, 더 높은 성능을 원하면 다른 가중치 사용 가능
# 이미지 로드
image_path = '/content/drive/MyDrive/data19/office3.jpg'
image = cv2.imread(image_path)
# YOLOv8 모델로 사물 탐지 수행
results = model(image)
# 결과 시각화
annotated_image = results[0].plot()
# 결과 출력
plt.imshow(cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)) # BGR -> RGB 변환
plt.axis('off') # 사진에서 축 없애기
plt.show()
# 결과 저장
output_path = '/content/drive/MyDrive/data19/office3_detected.jpg'
cv2.imwrite(output_path, annotated_image)
print(f"Detection results saved to {output_path}")
4. 동영상 사물인식 수행
from ultralytics import YOLO
import cv2
# YOLOv8 모델 로드
model = YOLO('yolov8n.pt') # Nano 버전. 성능이 더 필요하면 'yolov8s.pt', 'yolov8m.pt' 등을 사용할 수 있음
# 동영상 파일 경로 설정
input_video_path = '/content/drive/MyDrive/data19/cut_video.mp4' # 업로드된 동영상 경로
output_video_path = '/content/drive/MyDrive/data19/cut_video_detected.mp4' # 디텍션 결과가 저장될 동영상 경로
# 동영상 파일 열기
cap = cv2.VideoCapture(input_video_path)
# 동영상 저장을 위한 설정
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # mp4 코덱 설정
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
out = cv2.VideoWriter(output_video_path, fourcc, fps, (width, height))
# 각 프레임에 대해 YOLOv8로 객체 탐지 수행
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# YOLOv8로 객체 탐지 수행
results = model(frame)
annotated_frame = results[0].plot() # 탐지된 결과를 시각화
# 시각화된 프레임을 동영상으로 저장
out.write(annotated_frame)
# 리소스 해제
cap.release()
out.release()
print(f"Detection video saved at {output_video_path}")
https://cafe.daum.net/oracleoracle/SpOP/375
▣ 얼굴인식 신경망 만들기
얼굴 인식이 필요한 분야 ?
1. 상권 분석시 유동인구 행인 얼굴 모자이크 처리
2. 경찰청에서 cctv 의 범인 찾는데 활용
3. 미아나 치매 노인들을 cctv 로 찾는데 활용
4. 기타 여러 아이디어들
https://cafe.daum.net/oracleoracle/SpOP/371
https://colab.research.google.com/drive/1CU3JozS8XQRLBvCKOq5PDh1-OHrAi2mc
1. 모듈 임포트
!git clone https://github.com/heartkilla/yolo-v3.git
%cd /content/yolo-v3
!pip install -r /content/yolo-v3/requirements.txt
import tensorflow as tf
print ( tf.__version__)
%cd /content/yolo-v3
!wget -P /content/yolo-v3/weights https://pjreddie.com/media/files/yolov3.weights
import tensorflow as tf
tf.__version__
!python /content/yolo-v3/load_weights.py
%cd /content/yolo-v3
!apt install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libtiff5-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip
!pip install face_recognition
import cv2
import face_recognition
2. 코드 돌리기
# 필요한 라이브러리 임포트
import face_recognition
import cv2
import numpy as np
# 비디오와 얼굴 이미지 로드
input_movie = cv2.VideoCapture("/content/drive/MyDrive/data19/blackpink2_exported.mp4")
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))
image = face_recognition.load_image_file("/content/drive/MyDrive/data19/sample2.jpg")
face_encoding = face_recognition.face_encodings(image)[0]
# 알려진 얼굴 설정
known_faces = [face_encoding]
# 변수 초기화
face_locations = []
face_encodings = []
face_names = []
frame_number = 0
# 비디오 설정
video_size = (1280, 720)
output_size = (1280, 720)
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
output_movie = cv2.VideoWriter('videolisa2.mp4', fourcc, 30, output_size)
# 각 프레임 처리
while True:
ret, frame = input_movie.read()
if not ret:
break
frame_number += 1
img_bgr = cv2.resize(frame, video_size)
rgb_frame = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
# 얼굴 위치와 인코딩 탐지
face_locations = face_recognition.face_locations(rgb_frame, model="cnn")
# 각 프레임의 얼굴 인코딩을 가져옴
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
face_names = []
res = []
# 알려진 얼굴과 매칭 확인
for face_encoding in face_encodings:
match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.60)
res.append(sum(match))
name = "lisa" if match[0] else None
face_names.append(name)
try:
confi = round(sum(res) / len(res), 3) if res else 0
except ZeroDivisionError:
continue
# 결과에 라벨 표시
for (top, right, bottom, left), name in zip(face_locations, face_names):
if not name:
continue
# 얼굴 주위에 상자 그리기
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# 얼굴 아래에 이름이 있는 라벨 그리기
cv2.rectangle(frame, (left, bottom - 25), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name + str(confi), (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1)
# 결과 프레임을 비디오 파일에 저장
print(f"Writing frame {frame_number} / {length}")
output_movie.write(frame)
# 완료
input_movie.release()
output_movie.release()
print("비디오 저장이 완료되었습니다.")
정확률 무엇 ㅋㅋ
3. 다시 확률을 조정할 수 있는 전체 코드_블랙핑크
# 필요한 라이브러리 임포트
import face_recognition
import cv2
import numpy as np
# 비디오와 얼굴 이미지 로드
input_movie = cv2.VideoCapture("/content/drive/MyDrive/samples7/blackpink.mp4")
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))
image = face_recognition.load_image_file("/content/drive/MyDrive/samples7/lisa.png")
face_encoding = face_recognition.face_encodings(image)[0]
# 알려진 얼굴 설정
known_faces = [face_encoding]
# 변수 초기화
face_locations = []
face_encodings = []
face_names = []
frame_number = 0
# 비디오 설정
video_size = (1280, 720)
output_size = (1280, 720)
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', 'V')
output_movie = cv2.VideoWriter('videolisa2.mp4', fourcc, 30, output_size)
# 각 프레임 처리
while True:
ret, frame = input_movie.read()
if not ret:
break
frame_number += 1
img_bgr = cv2.resize(frame, video_size)
rgb_frame = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
# 얼굴 위치와 인코딩 탐지
face_locations = face_recognition.face_locations(rgb_frame, model="cnn")
# 각 프레임의 얼굴 인코딩을 가져옴
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
face_names = []
res = []
# 알려진 얼굴과 매칭 확인
for face_encoding in face_encodings:
match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.5)
distance = face_recognition.face_distance(known_faces, face_encoding)[0] # 유사도 계산
res.append(distance)
if match[0] and distance < 0.4: # 유사도 기준을 추가하여 필터링
name = f"lisa ({distance:.2f})"
else:
name = None
face_names.append(name)
# 결과에 라벨 표시
for (top, right, bottom, left), name in zip(face_locations, face_names):
if not name:
continue
# 얼굴 주위에 상자 그리기
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# 얼굴 아래에 이름이 있는 라벨 그리기
cv2.rectangle(frame, (left, bottom - 25), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1)
# 결과 프레임을 비디오 파일에 저장
print(f"Writing frame {frame_number} / {length}")
output_movie.write(frame)
# 완료
input_movie.release()
output_movie.release()
print("비디오 저장이 완료되었습니다.")
'빅데이터 분석(with 아이티윌) > deep learning' 카테고리의 다른 글
[빅데이터분석] 딥러닝_20. 홈페이지에 있는 일반 상담 챗봇 만들기(+streamlit 업로드) (0) | 2024.10.30 |
---|---|
[빅데이터분석] 딥러닝_19. 자연어 처리 신경망 만들어서 챗봇 만들기 (2) | 2024.10.30 |
[빅데이터분석] 딥러닝_16. 사진 속에서 검출 인터페이스 만들기 (1) | 2024.10.24 |
[빅데이터분석] 딥러닝_15. 딥러닝의 역사 (0) | 2024.10.22 |
[빅데이터분석] 딥러닝_14. 음성 분류 신경망 인터페이스 만들기 (0) | 2024.10.22 |