[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로 분석하기.

이미지 분석용 코드 (학습용 데이터)


이미지 전처리

  • 노이즈 제거
  • 정방향 확인 (회전되어 있으면 똑바로)
  1. Object_dectection.
    • 인지 구분하기.
    • 그리고 옷만 크롭하기
  2. GrayScale.
    • 색상 이미지는 흑백으로 처리.

유사도 확인 (확률값으로 표현)

  • 서로 동일 옷인지 비교하는 방법 ***
    • 흠. 학습시킨 후 두 사진의 옷. 유사도 검증
    • MNIST 조차도, 이게 어떤 옷인지가 아니라. 의류의 종류를 맞춰줌. (티셔츠. 가방. 신발 등..)
    • 겁나 챌린징;;
    • 그래서 티쳐블 머신 같은 경우, 클래스별로 학습. → 일단 겁나 많이 학습시켜서 그 패턴이 뭔지는 모르지만 맞추는 식으로..
      • e,g. 뭔지 모르겠지만, 그 사진은 A클래스를 가리키는 것 같습니다.

여러 케이스별 학습 (Very Hard..)

  • 우선은 같은 배경. 같은 조명으로 한다고 가정하자...

    • 가급적 무채색 배경. 스튜디오 조명 같은거
  • 조명종류별 이미지 학습.

    • 어두울떄 밝을때
    • 조명 종류별
      • 형광등. LED. 할로겐(주광색). 야외(햇빛)

참고 자료

좋은 웹페이지 즐겨찾기