[Toy] OOTD 트래커 (2) 코드작업
1. 사진찍으면 S3 업로드하기
- 라즈베리파이에 코드 삽입
- 계정연결
aws s3 s3://<bucket-name>
# config
aws_access_key_id = ''
aws_secret_access_key = ''
region = 'ap-northeast-2'
s3_output = 's3://<bucket-name>/inyoung/rasp/img'
2. 라즈베리파이쪽 작업
## fswebcam 설치
sudo apt-get install fswebcam
# 해상도(resoultion) 1280X720.
fswebcam -r 1280x720 --no-banner image2.jpg
mkdir webcam
3. webcam.sh (Bash)
- 목적
- rasp 업데이트
- 트리거. 스케쥴.
#!/bin/bash
# 업데이트 업그레이드
sudo apt-get update
sudo apt-get upgrade
# 사람 얼굴 감지시에, 해당 sh 작동(트리거. 스케쥴)
# 1. 웹캠 연결 # fswebcam 설치
# 2. 웹캠 사진 촬영 및 저장.
today = $("%Y-%m-%d")
# 오늘 날짜가 있다면, 거기에 저장 없다면 별도 폴더로 만들어서 저장.
mkdir {today_date}
aws s3 . > {today_date}/{file_name}.jpg
#
fswebcam -r 1280x720 --no-banner /home/pi/webcam/$today.jpg
# s3.py 실행.
python3 s3.py
# 권한설정 바꾸기.
chmod +x webcam.sh
4. 버킷 저장 파일구조
- 버킷명/유저별/일자별
e.g. /19921011/2020-10-10/0001.jpg
5. 테이블 설계
# user_image 테이블
id(PK) : 이미지ID (Integer) : AutoIncrement
user_id : 유저ID (Integer)
product_id : 상품ID(라벨링) (Varchar)
created_at : 이미지 생성일
upload_at : 이미지 업로드일
⇒ 이 사진은 어느 유저의 옷이다. 알 수 있는 메타정보.
helper.py
def upload_file(file_name, bucket, object_name=None):
"""Upload a file to an S3 bucket
:param file_name: File to upload
:param bucket: Bucket to upload to
:param object_name: S3 object name. If not specified then file_name is used
:return: True if file was uploaded, else False
"""
# If S3 object_name was not specified, use file_name
if object_name is None:
object_name = file_name
# Upload the file
s3_client = boto3.client('s3')
try:
response = s3_client.upload_file(file_name, bucket, object_name)
except ClientError as e:
logging.error(e)
return False
return True
s3.py
import boto3
from helper import upload_file
from datetime import datetime
import os
# Bucket 이름 확인.
s3=boto3.client('s3')
response=s3.list_buckets()
buckets = [bucket['Name'] for bucket in response['Buckets']]
print(buckets)
s3_resource = boto3.resource('s3',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name=region
)
# 3. 저장된 사진을 AWS s3에 업로드 (내부 로컬에 저장하지 않기.)
# -- 업로드시 사진에 대한 메타정보도 별도로 같이 저장
today = datetime.today()
# 이미지 경로지정
img_path = '/home/pi/webcam/{}.jpg'.format(today)
# 버킷에 저장
upload_file(img_path, 'croquis-image-temp')
# 로그 저장
# 업로드한 이미지 로컬에서 삭제하기
os.remove(img_path)
얼굴 인식 Face_Detection.py
https://github.com/kunalyelne/Face-Recognition-using-Raspberry-Pi
- 얼굴이라고 판단되면 사진 찍을 트리거 준비를 함.
- 단, 얼굴은 blur 처리를 해주기(privacy protection)
사전설치
# opencv 설치.
pip install opencv-python
pip install opencv-contrib-python # 메인 모듈
- 실시간으로 인식하는 것을 만들 것인가.
- 사진으로 저장하고 나서 인식할 것인가.
# 평소에는 '절전'상태하다가 감지될때만 작동할 수 있나? -> 힘들다면 패스.
if 얼굴이 인식되고,
5초 후에 저장하도록 (얼굴 인식한다고 바로 저장은 NO)
else :
pass
import numpy as np
import requests
import cv2
print(cv2.__version__)
url = 'https://raw.github.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml'
r = requests.get(url, allow_redirects=True)
open('haarcascade_frontalface_default.xml', 'wb').write(r.content)
# faceCascade = cv2.CascadeClassfier('/home/pi/open-cv')
img = cv2.imread('sample_imagees/2.jpg')
cascade_faces = cv2.CascadeClassfier('haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
## filter for face
faces = cascade_faces.detectMultiScale(gray, 1.3,7)
위에서 저장한 데이터를 바탕으로 이미지 opencv로 분석하기.
이미지 분석용 코드 (학습용 데이터)
이미지 전처리
- 노이즈 제거
- 정방향 확인 (회전되어 있으면 똑바로)
- Object_dectection.
옷
인지 구분하기.- 그리고 옷만 크롭하기
- GrayScale.
- 색상 이미지는 흑백으로 처리.
유사도 확인 (확률값으로 표현)
- 서로 동일 옷인지 비교하는 방법 ***
- 흠. 학습시킨 후 두 사진의 옷. 유사도 검증
- MNIST 조차도, 이게 어떤 옷인지가 아니라. 의류의 종류를 맞춰줌. (티셔츠. 가방. 신발 등..)
- 겁나 챌린징;;
- 그래서 티쳐블 머신 같은 경우, 클래스별로 학습. → 일단 겁나 많이 학습시켜서 그 패턴이 뭔지는 모르지만 맞추는 식으로..
- e,g. 뭔지 모르겠지만, 그 사진은 A클래스를 가리키는 것 같습니다.
여러 케이스별 학습 (Very Hard..)
-
우선은 같은 배경. 같은 조명으로 한다고 가정하자...
- 가급적 무채색 배경. 스튜디오 조명 같은거
-
조명종류별 이미지 학습.
- 어두울떄 밝을때
- 조명 종류별
- 형광등. LED. 할로겐(주광색). 야외(햇빛)
참고 자료
- 블로그
- Google Coral Edge TPU Dev board 구매 및 개발 (구글 코랄 AI 엣지 컴퓨팅 사용 및 후기) (https://twodragon.tistory.com/482)
- https://goodtogreate.tistory.com/entry/Coral-Dev-Board-Google-Edge-TPU-설정-및-사용후기
- https://blog.naver.com/PostView.nhn?blogId=ulalalab&logNo=221330716119&redirect=Dlog&widgetTypeCall=true&directAccess=false
- https://mazdah.tistory.com/852
- How To Run TensorFlow Lite on Raspberry Pi for Object Detection https://www.youtube.com/watch?v=aimSGOAUI8Y
- How to Use the Coral USB Accelerator with the Raspberry Pi - Increase TensorFlow Lite FPS! https://www.youtube.com/watch?v=qJMwNHQNOVU
- How To Run TensorFlow Lite on Raspberry Pi for Object Detection https://www.youtube.com/watch?v=aimSGOAUI8Y
- https://hillier.tistory.com/22
- https://github.com/kunalyelne/Face-Recognition-using-Raspberry-Pi
- (참고) 머신러닝 모르는 사람도 가능한 인공지능 웹서비스 만들기 (김보경 | SOCAR) https://www.youtube.com/watch?v=FwSSPBxOdxQ&feature=youtu.be&ab_channel=AFLearning
Author And Source
이 문제에 관하여([Toy] OOTD 트래커 (2) 코드작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@2innnnn0/Toy-OOTD-트래커-2-코드작업저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)