NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    딥러닝 텐서플로우 케라스로 크롬 공룡게임 A.I 만들기 (소스 첨부)

    페이지 정보

    본문

    마이크로소프트의 C#은 그리 어렵지 않게 OpenCV를 설치할 수 있는데요. 아직까지도 외부 언어들에 대해서는 에러가 발생하곤 합니다. 이번에 Visual Studio에서 Python을 개발하기 위한 환경을 구성하면서 여러가지 난관에 부딪히고 있네요... 아래와 같이 모듈을 찾을 수 없는 경우죠. 이외에도 app, key등등... 아나콘다로 시스템을 구성해도 버전 미스매치로 인해 발생되는 여러가지 상황들은 해결하기가 쉽지 않습니다-_-;

    No module named 'cv2'

    img.gif

     

     

     

    import cv2를 입력하면 모듈이 인식이 안됩니다. 하지만~ 대문자로 CV2를 import 시키면 인식하죠. 어떤 이유인지는 모르겠지만 Visual Studio의 PyPI로 설치하면 무언가 대소문자가 잘못되는듯 합니다. 뭐 예상만 할뿐~ 로우레벨까지 까볼(분석) 생각은 하지도 않게 되네요. 바쁘니까요-_-;

    img.gif

     

     

     

    아무튼, 설치되어 있는 아나콘다3을 이용해서 설치해보기로 합니다. 윈도우 시작 메뉴 옆 검색창에서 anaconda를 입력하고 Anaconda Prompt (Anaconda3)을 클릭하세요. 아나콘다는 [ 여기 ]에서 다운로드 받을 수 있습니다.

    img.png

     

     

     

    아래와 같이 입력하고 설치하세요.

    pip install opencv-python

    img.png

     

     

     

    뭐 비주얼 스튜디오에서 설치하는 것과 크게 다르지 않습니다. 그런데 왜 비주얼 스튜디오에서는 CV2로 모듈 이름이 만들어지는지 모르겠네요-_-; 아무튼 잘 되는지 확인해봐야겠죠? 간단한 샘플 코드인데요. Python 딥러닝 게시판에 있는 코드를 토대로 작성했습니다. [ 원본 블로그 보기 ] 솔루션 소스 코드는 첨부되어 있으니 다운로드 받아서 해보세요^^

    import cv2 as cv
    import numpy as np
     
    img_rgb = cv.imread('images/test.png')
    img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
     
    template1 = cv.imread('images/cactus1.png', 0)
    template2 = cv.imread('images/cactus2.png', 0)
    template3 = cv.imread('images/bird1.png', 0)
    template4 = cv.imread('images/bird2.png', 0)
     
    w1, h1 = template1.shape[::-1]
    w2, h2 = template2.shape[::-1]
    w3, h3 = template3.shape[::-1]
    w4, h4 = template4.shape[::-1]
     
    res1 = cv.matchTemplate(img_gray, template1, cv.TM_CCOEFF_NORMED)
    res2 = cv.matchTemplate(img_gray, template2, cv.TM_CCOEFF_NORMED)
    res3 = cv.matchTemplate(img_gray, template3, cv.TM_CCOEFF_NORMED)
    res4 = cv.matchTemplate(img_gray, template4, cv.TM_CCOEFF_NORMED)
     
    threshold = 0.8
    loc1 = np.where(res1 >= threshold)
    loc2 = np.where(res2 >= threshold)
    loc3 = np.where(res1 >= threshold)
    loc4 = np.where(res2 >= threshold)
     
    for pt in zip(*loc1[::-1]):
        cv.rectangle(img_rgb, pt, (pt[0] + w1, pt[1] + h1), (0, 0, 255), 2)
     
    for pt in zip(*loc2[::-1]):
        cv.rectangle(img_rgb, pt, (pt[0] + w2, pt[1] + h2), (0, 255, 0), 2)
     
    for pt in zip(*loc1[::-1]):
        cv.rectangle(img_rgb, pt, (pt[0] + w3, pt[1] + h3), (0, 0, 255), 2)
     
    for pt in zip(*loc2[::-1]):
        cv.rectangle(img_rgb, pt, (pt[0] + w4, pt[1] + h4), (0, 255, 0), 2)
     
    cv.imshow('result', img_rgb)
    cv.waitKey(0)

     

     

    참고한 블로그의 결과와 다르게 나오는군요-_-; 아무튼 그래도 검출은 잘 되었네요. 아마도... 2번 실행된게 아닌가 생각됩니다.

    img.png

     

     

     

    아래는 얼굴 인식인데요. 이것도 그렇게 인식률이 좋지는 않네요. 머신 러닝 관련 자료들을 찾다보니 정말 다양한 형식으로 모델이 존재하고 방식도 천차만별인걸 알게 되었습니다. 어떤걸 선택해서 사용해야 할지 참 고민이네요...ㅋ

    import cv2
    import sys
     
    image_file = "images/face.jpg"
    cascade_file = "data/haarcascades/haarcascade_frontalface_alt.xml"
     
    image = cv2.imread(image_file)
    image_gs = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
     
    cascade = cv2.CascadeClassifier(cascade_file)
    face_list = cascade.detectMultiScale(image_gs, scaleFactor=1.1, minNeighbors=1, minSize=(150, 150))
     
    if len(face_list) > 0:
        print(face_list)
        color = (0, 0, 255)
        for face in face_list:
            x, y, w, h = face
            cv2.rectangle(image, (x, y), (x+w, y+h), color, thickness=8)
    else:
        print("no face")
     
    cv2.imshow('result', image)
    cv2.waitKey(0)
    

     

     

    위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다. 50프로밖에 인식이 안되네요. 전체 솔루션 소스는 첨부해두었으니 관심 있는 분들은 다운로드 받아서 테스트 해보세요~

    img.png

     

     

     

    간단하게 에러만 해결하려고 했는데... 글을 적다보니 길어졌네요-_-;

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천1 비추천0

    첨부파일

    댓글목록

    profile_image

    롤로노이님의 댓글

    no_profile 롤로노이 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    소심비형님 나중에 정말 기회가 된다면 티처블 머신으로 학습한 내용을 바탕으로 ngm에 접목시키는걸 한번 강의해주시면 참 좋을듯 한데 (유로로 하는것도 나쁘지 않아보입니다) 시간 나시면 한번 검색해서 봐주시기만 하면 감사하겠습니다!!! (이거 올리고 예전에 올린걸 지금 봤네요 아직 좀 힘들더라도 나중에 언젠간 추가가 될수도 있겠죠 ㅠㅠ)

    profile_image

    엔지엠소프트웨어님의 댓글

    엔지엠소프트웨어 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일 Date

    티처블머신으로 만든 pb파일을 frozen하는 방법은 저도... 몰라요^^;
    해본적이 없기 때문에요. 일반적으로 필요한 파일들이 전부 갖춰지는게 아니더라구요.
    python 전문가에게 도움을 받아야 할거 같아요.

    티처블머신 pb > frozen > common pb 가 되어야 하는데...

    profile_image

    초보초보님의 댓글

    no_profile 초보초보 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일 Date

    감사합니다 한번해보겠습니다.