• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    해결됨

Haar GUI강의중 에러

20.05.14 20:38 작성 조회수 435

0

바로  Haar의 첫번쨰 강의인 이전강의는 잘 돌아갔습니다.

그리고 물론 TK인터를 사용하는 데이터시각화강의에서도 모든 예제가 잘 돌아갔습니다.

그런데 2번째는 pyimage5를 찾을수 없다면서 에러가 뜹니다. 

왜그런걸까요?  도저히 못잡겠네요

답변 4

·

답변을 작성해보세요.

0

안녕하세요?

문제가 해결되었다니 다행입니다.

저도 가끔 아주 사소한 문제로 고생하는 경우가 있습니다.

당시는 힘들어도 나중에는 도움이 되더라고요.

수업에서 좋은 내용 배우시길 기원합니다.

감사합니다.

0

김용진님의 프로필

김용진

질문자

2020.05.14

답변감사드립니다.

문제는 정말 사소한거였습니다.

jupyter notebook이 실행되고있을때 Home에 image파일을 추가했었는데

그게 jupyter노트북을 끄고  다시 켜니 이 파일을 이제서야 인식합니다.

home에 파일을 추가하면 다시 노트를 껐다켜야 home에 추가한 파일을 프로그램이 인식하나봅니다.

이런 사소한문제때문에 몇시간을 해매서 그런지 앞으로의 단계들이 멀게만 느껴집니다.

수업 잘듣고있습니다. 감사합니다

0

안녕하세요?

에러 메시지만 봐서는 print('File name : ', file_name)도 실행이 안되는 것을 보니 이미지를 못가지고 올 수도 있을 것 같은데 './image'폴더와 'marathon_01.jpg'파일이 존재하는지 먼저 확인해보세요. 

감사합니다.

0

김용진님의 프로필

김용진

질문자

2020.05.14

import cv2

import numpy as np

from tkinter import *

from PIL import Image

from PIL import ImageTk

#새로운 팩

from tkinter import filedialog

face_cascade_name = './cv2/data/haarcascade_frontalface_alt.xml'

eyes_cascade_name = './cv2/data/haarcascade_eye_tree_eyeglasses.xml'

file_name = './image/marathon_01.jpg'

title_name = 'Haar cascade object detection'

frame_width = 500

#frame 크기를 바꾸면서 활용

def selectFile():

    file_name =  filedialog.askopenfilename(initialdir = "./image",title = "Select file",filetypes = (("jpeg files","*.jpg"),("all files","*.*")))

    print('File name : ', file_name)

    read_image = cv2.imread(file_name)

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

    frameSize = int(sizeSpin.get())

    ratio = frameSize / width

    dimension = (frameSize, int(height * ratio))

    read_image = cv2.resize(read_image, dimension, interpolation = cv2.INTER_AREA)

    image = cv2.cvtColor(read_image, cv2.COLOR_BGR2RGB)

    image = Image.fromarray(image)

    imgtk = ImageTk.PhotoImage(image=image)

    detectAndDisplay(read_image)

    

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)

        faceROI = 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)

    image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

    image = Image.fromarray(image)

    imgtk = ImageTk.PhotoImage(image=image)

    detection.config(image=imgtk)

    detection.image = imgtk

    

#main

main = Tk()

main.title(title_name)

main.geometry()

read_image = cv2.imread("./image/marathon_01.jpg")

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

ratio = frame_width / width

dimension = (frame_width, int(height * ratio))

read_image = cv2.resize(read_image, dimension, interpolation = cv2.INTER_AREA)

image = cv2.cvtColor(read_image, cv2.COLOR_BGR2RGB)

#bgr을 RGB로 바꿔준다. 

image = Image.fromarray(image)

imgtk = ImageTk.PhotoImage(image=image) 

face_cascade_name = './cv2/data/haarcascade_frontalface_alt.xml'

eyes_cascade_name = './cv2/data/haarcascade_eye_tree_eyeglasses.xml'

face_cascade = cv2.CascadeClassifier()

eyes_cascade = cv2.CascadeClassifier()

#-- 1. Load the cascades

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)

label=Label(main, text=title_name)

label.config(font=("Courier", 18))

label.grid(row=0,column=0,columnspan=4)

sizeLabel=Label(main, text='Frame Width : ')                

sizeLabel.grid(row=1,column=0)

sizeVal  = IntVar(value=frame_width)

sizeSpin = Spinbox(main, textvariable=sizeVal,from_=0, to=2000, increment=100, justify=RIGHT)

#정렬은 오른쪽으로

sizeSpin.grid(row=1, column=1)

Button(main,text="File Select", height=2,command=lambda:selectFile()).grid(row=1, column=2, columnspan=2, sticky=(W, E))

detection=Label(main, image=imgtk)

detection.grid(row=2,column=0,columnspan=4)

detectAndDisplay(read_image)

main.mainloop()