물체 검출을 이용한 피스 사인으로부터 지문 정보 유출을 방지하기 위한 화상 처리

소개



여기 의 기사로, SNS에 투고된 화상으로부터 지문 정보등의 생체 정보가 도난당한다고 하는 내용이 쓰여져 있었습니다. 거기서, 화상 처리에 의해, SNS에 투고된 화상의 정보 유출을 막자!
이번의 목적은, SNS등에 투고된 화상으로부터 지문이 도난당할 수 없는 화상 처리를 실시하는 것입니다. 다만, 이번 처리의 대상으로서는, 피스 사인만으로 하고 있습니다.
(※정보 유출을 막는다면, 화상 전체를 흐리게 하면 좋을까?라고도 생각했습니다만, 모처럼 깨끗하게 촬영한 화상이므로, 정보 유출이 될 것 같은 부분만을 대상으로 하면 좋을까 라고 개인적으로 생각해, 이번은 피스 사인을 대상으로 합니다.)

처리 흐름



  이하와 같은 흐름으로 처리를 실시했습니다.
1. 물체 감지를 사용하여 이미지에서 조각 사인을 감지
2. 검출된 조각 사인에 흐림 처리 적용

이러한 처리를 실시하는데 있어서 활용해 주신 것은 이하가 됩니다.
  • 학습 이미지 주석 도구 : labelImg
  • 물체 검출: YOLO v3

  • ※코드 전체는, 나중에 소개 예정입니다.

    1. 물체 감지를 사용하여 이미지에서 조각 사인을 감지



    학습 이미지는 295장을 준비했습니다. 피스 사인의 검출기를 작성할 때, labelImg의 사용법이나 YOLO v3에 근거한 모델의 작성 방법등은, 이하의 사이트를 참고로 했습니다.
  • Yolo 학습용 데이터 세트 작성 도구: labelImg
  • Keras의 YOLO-v3를 움직였다.

  • 2. 검출된 조각 사인에 흐림 처리 적용



    이번은, 흐림 처리로서, 가우시안 필터를 채용했습니다. 발견된 조각 사인에 흐림 처리를 적용하기 위해 소개한 YOLO v3 프로그램을 조금 편집했습니다. 변경 개소는 이하의 2점입니다.

    yolo.py의 167행
    return image, out_boxes # out_boxesを追加
    

    yolo_video.py 내
    # ============ 4行目 ============
    from PIL import Image, ImageFilter   # ImageFilterを追加
    
    # ============ 関数 detect_img 内 ============
    def detect_img(yolo):
        while True:
            img = input('Input image filename:')
            try:
                image = Image.open(img)
            except:
                print('Open Error! Try again!')
                continue
            else:
    #            r_image = yolo.detect_image(image)
                # =============== 以下,編集・追加部分 =============== 
                import numpy as np
                r_image, out_boxes = yolo.detect_image(image)
                im = np.array(r_image)          
                for i in range(len(out_boxes)):
                    box = out_boxes[i]   
                    top, left, bottom, right = box
                    top = max(0, np.floor(top + 0.5).astype('int32'))
                    left = max(0, np.floor(left + 0.5).astype('int32'))
                    bottom = min(image.size[1], np.floor(bottom + 0.5).astype('int32'))
                    right = min(image.size[0], np.floor(right + 0.5).astype('int32'))
                    im_crop = im[top:bottom, left:right, :]
                    im_crop = Image.fromarray(im_crop)
                    im_blur = im_crop.filter(ImageFilter.GaussianBlur(1.5))
                    im_blur = np.array(im_blur) 
                    im[top:bottom, left:right, :] = im_blur
                result_img = Image.fromarray(im)
                result_img.show()
                result_img.save('test.jpg', quality=95)                           
                # =============== 以上,編集・追加部分 ===============     
        yolo.close_session()
    

    결과



    검증 화상으로서는, 「무료 사진, 소재, 무료 소재 」를 이용했습니다. 이하에서는, 이번 처리를 적용한 결과를 표시하고 있어 왼쪽으로부터 「원화상」, 「YOLO를 적용한 결과」, 「피스 사인 영역을 흐린 화상」이 되고 있습니다.







    원본 이미지 1
    YOLO를 적용한 결과
    평화 기호 영역을 흐리게 한 이미지








    원본 이미지 2
    YOLO를 적용한 결과
    평화 기호 영역을 흐리게 한 이미지








    원본 이미지 3
    YOLO를 적용한 결과
    평화 기호 영역을 흐리게 한 이미지


    원 화상 2에 관해서, 여성의 왼손의 피스 사인이 검출되고 있지 않습니다만, 지문이 훔쳐질 것 같은 각도가 아니기 때문에, 검출할 수 없어도 OK일까라고 생각합니다.

    요약



    이번은, 피스 사인을 대상으로 지문 정보가 도난당하지 않는 화상 처리를 실시했습니다. 선명하게 찍힌 피스 사인이라면 검출 정밀도는 높았습니다. 앞으로는 지문 정보뿐만 아니라 홍채 정보나 지금 있는 장소가 특정되지 않는 이미지 처리를 생각해 갈 것입니다.
    SNS에서의 정보 유출을 막기 위해서는, 유저가 주의깊게 활용할 필요가 있습니다만, 그것이라고 부담없이 즐길 수 없습니다. 이번 기술이 SNS에 내장되면(혹시 이미 있을지도 모릅니다만), 정보 유출을 신경쓰지 않고, 부담없이 SNS를 즐길 수 있게 된다고 생각합니다.

    좋은 웹페이지 즐겨찾기