코드가 10줄보다 적은 얼굴 검출 프로그램 만들기


이야기


지난 몇 달 동안 나는 Intel® distribution of OpenVINO™ Toolkit로 내 손을 더럽히고 이 공구 가방이 얼마나 강한지 설명하기 위해 몇 가지 프로젝트를 해 왔다.
이 글에서, 나는 내가 지난 몇 주 동안 줄곧 일하고 있는 라이브러리 (프로젝트가 진행 중) 를 소개할 것이다.이 라이브러리는 Open VINO 모델이Python에서 실현되는 것을 간소화하고 당신을 위해 더 많은 힘든 일을 하며 당신에게 더 많은 시간을 주고 즐거움을 누릴 수 있습니다. 즉, 적으면 많습니다!!!
10줄 아래에 간단한 얼굴 검사 프로그램을 만들 것입니다. 더 많은 정보는 the How 로 넘어가십시오.

TL;박사


링크 PyVINO-Utils 라이브러리: https://github.com/mmphego/pyvino_utils
스타

방법


이 라이브러리는 하나abstract base class를 실현하여 복잡한 작업을 완성한다. 이 모듈 처리 모델은 불러오기, 입력 처리와 추리(예측)를 처리한다.
Detection, 식별과 위치 추정 모델은 기류 실현을 계승하고 추리 출력을 후처리하고 관심 구역(ROI) 주위 경계 프레임을 그리는 기능을 실현했다.
이것은 응용 프로그램 개발 시간을 일부 줄여 개발자가 사용자 규범을 실현하는 데 더욱 전념하도록 확보한다.
나는 지금 듣기에 수리공이 아니라 판매원 같다...

다니다


코드 연습


다음 코드는 Intel i7 CPU를 사용하여 간단한 얼굴 검사를 실현하고 USB 기반의 NCS2(Intel® Neural Compute Stick 2)를 통해 라즈베리 파이에 쉽게 이식할 수 있습니다.응용 프로그램이 무궁무진하다.
import argparse

from pyvino_utils import InputFeeder
from pyvino_utils.models.detection import face_detection
1-4행에서 필요한 패키지를 가져오기 시작합니다.명령행 매개 변수를 처리하려면 argparseInputFeeder 라이브러리 face_detection 에서 입력 (이미지, 영상 또는cam 흐름) 과 face detection 모듈을 처리해야 합니다.
def arg_parser():
  parser = argparse.ArgumentParser(
     description="A simple OpenVINO based Face Detection running on CPU."
   )
  parser.add_argument("-i", "--input", help="Video or image input.", required=True)
  parser.add_argument(
    "-m", "--model", help="Face detection model name (no extension).", required=True
   )
  parser.add_argument(
    "-b", "--show-bbox", action="store_true", help="Show bounding box."
   )
  return parser.parse_args()
함수pyvino_utils는 두 개의 명령행 매개 변수와 선택할 수 있는 arg_parser 매개 변수의 해석을 처리합니다. 이 매개 변수는 출력을 화면에 표시할 수 있도록 합니다.show-bbox 파라미터는 이미지나 영상 경로를 수신하고 네트워크 카메라의 요점을 제시한다.두 번째 필수 매개 변수는 OpenVINOinput가 있는 위치의 이름과 경로입니다. 확장자는 포함되지 않습니다.패키지를 가져오고 명령행 파라미터를 해석했기 때문에, 우리는 우리의 주요 기능을 계속 실현할 수 있다.
def main(args):
   input_feed = InputFeeder(input_feed=args.input)
   face_detector = face_detection.FaceDetection(
     model_name=args.model, input_feed=input_feed
   )

  for frame in input_feed.next_frame(progress=False):
     inference_results = face_detector.predict(frame, show_bbox=args.show_bbox)
    if args.show_bbox:
      input_feed.show(frame)
   input_feed.close()

if __name__ == "__main__":
   args = arg_parser()
  main(args)
두 번째 줄: 처리model, 이것은 class, 주로 입력을 처리하고 나중에 사용할 대상InputFeeder을 만듭니다.
3-5 줄: 입력과 추리를 처리하는 input_feed 대상을 만듭니다.우리는 classface_detector라고 하는데, 이것은 face_detection.FaceDetectionmodel_name 대상(이미지/영상/카메라가 입력한 너비와 높이를 결정하는 데 주로 쓰인다)을 필요로 한다.
7-8행: input_feed 프레임을 순환하여 현재 프레임을 가져와 우리의 프레임input_feed으로 전달합니다.이 함수는 운행 추리를 책임지고 결과는 face_detector.predict 사전에 저장된다.이 사전은 처리된 출력(키/값 쌍)을 면 사각형 경계 상자 좌표 목록으로 포함합니다.inference_resultsargs.show_bbox이면 감지된 면 주위의 사각형이 그려집니다.
9-10 행: True 이 사실인지 확인한 다음 화면에 현재 args.show_bbox 를 표시하고 표면 주위에 녹색 사각형이 있는 경우
열한 줄: 열린 모든 창을 우아하게 정리하고 닫습니다.
14-16줄: 최고급 코드는 frame 블록입니다.if는 현재 모듈의 이름으로 계산된 내장 변수입니다.그러나 __name__ 모듈을 직접 실행한 다음 if 문자열로 설정합니다.1
따라서 이러한 상황에서 운행 블록 아래의 논리는 python main.py 호출되고 결과는 __name__ 에 저장된 다음에 위에서 정의한 "__main__" 함수를 호출하여 동시에 전달arg_parser 한다.
클론 저장소 또는 샘플 보기face detection application

튜토리얼


완전한 강좌와 코드 연습을 구경하다.

결론


위의 예는 10줄도 안 되는 코드에서 얼굴 검출 프로그램을 만드는 것이 얼마나 간단한지 설명한다.이것은 args 라이브러리가 우리를 위해 모든 복잡한 작업을 완성했기 때문이다. 왜냐하면 우리는 모듈/클래스를 만들어서 입력과 추리를 처리하고 처리할 필요가 없기 때문이다.
미래의 작업은 Open Model Zoo 에서 모델을 자동으로 다운로드하고 라이브러리를 확장하여 실례 분할과 텍스트 식별 등 다른 기능을 처리하는 것을 포함한다.

참고

  • Intel® Distribution of OpenVINO™ Toolkit
  • 좋은 웹페이지 즐겨찾기