• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

haar방식을 이용한 face detection편 질문

20.06.03 22:28 작성 조회수 260

0

코드를 따라서 작성했는데 NameError: name 'faceROI' is not defined 와같은 에러가 자꾸뜹니다.faceROI를 정의해줬는데 왜 정의가 되지않았다고 자꾸뜨는건가요?

제가쓴 코드는 아래와 같습니다.

import cv2

import numpy as np

def detectAndDisplay(frame):

    frame_gray=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    frame_gray=cv2.equalizeHist(frame_gray)

    #-- Detect faces

    faces=face_cascade.detectMultiScale(frame_gray)

    for (x,y,w,h) in faces:

        center=(x+w//2,y+h//2)

        frame=cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),4)

        feceROI=frame_gray[y:y+h,x:x+w]

        #-- In each face, detect eyes

        eyes=eyes_cascade.detectMultiScale(faceROI)

        for (x2,y2,w2,h2) in eyes:

            eye_center=(x+x2+w2//2,y+y2+h2//2)

            radius=int(round((w2+h2)*0.25))

            frame=cv2.circle(frame,eye_center,radius,(255,0,0),4)

        cv2.imshow("Capture-Face detection",frame)

print("opencv version:")

print(cv2.__version__)

img=cv2.imread("marathon_01.jpg")

print("width: {} pixels".format(img.shape[1]))

print("height: {} pixels:".format(img.shape[0]))

print("channels: {}".format(img.shape[2]))

(height,width)=img.shape[:2]

cv2.imshow("original image",img)

face_cascade_name="haarcascade_frontalface_alt.xml"

eyes_cascade_name="haarcascade_eye_tree_eyeglasses.xml"

face_cascade=cv2.CascadeClassifier()

eyes_cascade=cv2.CascadeClassifier()

if not face_cascade.load(cv2.samples.findFile(face_cascade_name)):

    print("--(!)Error loading face cascade")

    exit(0)

    

if not eyes_cascade.load(cv2.samples.findFile(eyes_cascade_name)):

    print('--(!)Error loading eyes cascade')

    exit(0)

    

detectAndDisplay(img)

cv2.waitKey(0)

cv2.destroyAllWindows()

답변 8

·

답변을 작성해보세요.

1

choi님의 프로필

choi

질문자

2020.06.04

아 계속 에러찾을려고 하루종일 보고있었는데  원인은 찾았는데 선생님코드와 다른데 왜 실행이 되는지 잘 모르겠네요. 아래와같이 하니 실행이 정상적으로 됩니다.

eyes=eyes_cascade.detectMultiScale(faceROI) 에서 faceROI대신 img를 넣으니 정상작동하네요.

근데 여기서 의문점이 선생님 강의에서는 괄호안에 img 가 아니라 faceROI를 써서 코드실행을해서 정상작동됐는데 왜 저는 실행이안되고 faceROI대신 img를 넣어야 되는지를 모르겠네요. 왜그런건가요? 

0

안녕하십니까?

일단 Untabify Region은 Tab을 없애주는 겁니다. 정상적으로 파이썬에 indent를 할때는 스페이스를 쳐서 해야지 스페이스와 tab을 섞어주면 에러가 납니다. 파이썬 에러메시지에 탭을 써서 잘못됐다고 친절하게 나오지 않습니다.  만약 그럴 경우에는 눈으로는 같은 라인에 있으나 faceROI를 정의한 라인이 같은 로직에 있지 않다고 판단할 수 있다는 생각입니다. 이건 제 경험에서 추정해본 겁니다. 

이 추정이 100%확실하다고 할 수는 없지만 다시 코드를 타이핑 한 코드가 작동하는 걸 봐서는 이런 경우일 확률이 높고 아니라도 최소한 다른 사소한 문제로 보입니다.

그리고 크리애플에서 강의를 구매하면 기간상관 없이 무제한 수강 가능합니다. 단, 구독은 말씀드린데로 기간 제한이 있지만 모든 강의를 들을 수 있습니다.

크리애플 강의는 세계 선두 결제회사인 Stripe를 사용하고 있어서 모든 신용카드나 직불카드로만 결제가 됩니다. 죄송하지만 무통장입금은 지원되지 않고 있습니다.

감사합니다.  

 

0

choi님의 프로필

choi

질문자

2020.06.04

Untabify Region 이라는게 탭할때 몇칸띄어쓸지를 정하는것아닌가요?. 이게맞다면 정상적으로 1tab당 4칸띄워쓴다고 애초에 정상적으로 설정이되어있었습니다.

제가 코드를 일일히 다시 써보니 이제는 정상작동합니다,

그러면 여기서 의문인게 제가올린 위의 코드들은 제가직접타이핑해서 안됐던것들인데 이제는 직접타이핑하니 또 된다는거죠.

헌데 indent의 문제였다면 indent가 잘못되었다고 에러표시가 나야하는데  NameError: name 'faceROI' is not defined 와 같이 faceFOI가 정의되지않았다고는 왜 뜨는건가요 indent가 제대로 안되어있어도 faceROI는 바로위에서 정의해줬잖아요???

그리고 이 질문과는 별개로 크리애플에서 구매한 강의는 인프런처럼  날짜기한없이 무제한수강 가능한건가요? 

또, 크리애플에서 강의 구매할때 무통장입금이 없는것같은데 무통장입금으로 강의구매는 불가능한가요?

0

안녕하세요?

제공한 정상적으로 작동하니 아마도 직접 쓰신 코드는 눈으로 보기에는 indent가 되어 있으나 tab을 사용하여 같은 레벨로 인식하지 못하는 것 아닌가 의심되네요. 만약 파이썬의 IDLE를 사용하신다면 코드 전체를 선택한 후 Tab메뉴에서 Untabify Region을 해보세요. 눈에는 같이 띄어진 것으로 보이나 파이썬 인터프리터는 Tab과 Space를 다르게 인식하곤 합니다.

이렇게 시도해 보시고 결과를 알려주세요. 이것이 아니라도 사소한 원인일 것 같으니 원인을 하나씩 찾아보면 될 것같아요. 

그리고 크리애플은 제가 직접 운영하는 지식포털 사이트로 직판장같은 개념입니다. 인프런은 좋은 파트너로 제 거의 모든 강의는 인프런에만 공유하고 있어요. 물론 강의구성이나 내용에는 차이가 없습니다. 단지 할인하는 시기와 방법이 다르기 때문에 가격 차이가 있을 수 있습니다.  크리애플은 제 강의들만 있으므로 모든 동영상 강의를 들을 수 있는 구독이라는 방식도 운영하고 있어요. 선택은 수강생 분들이 편하신 데로 하시면 됩니다.

감사합니다.    

0

choi님의 프로필

choi

질문자

2020.06.04

네 제공하는 예제 그대로 복사후 붙여넣기하니 정상작동합니다. 제가 직접쓰니 에러가 나네요.왜그런것같으신가요? (indent도 정확히 했는데 말이죠)

그리고 이 질문 외로 한가지 물어볼게있는데 크리애플에서도 손흥민얼굴찾기 강의등 인프런에있는강의가 크애플에 그대로있던데 인프런가격보다 최소 몇천원씩 훨씬 싸던데 왜이리 가격차이가나나요?

강의구성에 차이가없으면 조금 더 비싼 인프런에서 들을이유가 없는거아닌가요?

0

안녕하세요?

말씀하신 것을 봐서는 feceROI=frame_gray[y:y+h,x:x+w]을 제대로 인식 못하는 것 같은데 두 가지가 의심스럽네요.

일단 원인의 범위를 축소하기 위해 직접 쓰신 코드말고 제가 제공하는 예제를 그대로 실행해 보시고 동작하는지 알려주세요.

원래 동작하는 코드이니 아마도 사소한 원인을 수 있습니다. 제 코드가 수강생분의 환경에서 실행된다면 범위를 축소할 수 있을 것 같네요.

확인 후 알려주세요.

감사합니다.

0

choi님의 프로필

choi

질문자

2020.06.04

꼼꼼히 확인 해봤는데 indent 잘못된곳도 없습니다. 왜 자꾸 에러가나는지 도무지알수가없네요.

0

안녕하세요?

보내주신 코드 내용으로는 에러를 확인하기 어려운데

1. NameError: name 'faceROI' is not defined 가 발생한 위치를 찾아가서 내용을 확인하시거나

2, 제가 제공해드린 예제와 코드를 잘 비교해 보세요.

파이썬은 indent(칸 띄우는 것)에도 민감하므로 코드를 차분히 에디터에서 잘 확인해 보세요. 

감사합니다.