본문 바로가기
OpenCv/손가락 모션 인식

OpenCV python 가상 키보드 생성 및 입력받기

by 민주르륵 2019. 5. 13.

조잡하지만 색깔로 피부색을 인식시켰다. 이 인식시킨 손바닥으로 가상 키보드를 입력받아야 한다.

 

아, 그리고 저번 코드와 많이 바뀐점도 있다.

 

1. 면적 하나로 키보드를 입력받아야 하므로 가장 큰 면적만 남겨둔다.

if len(line):
		cnt=None
		max_area = 0
		max_cnt = 0
		for it in line:
			M = cv2.moments(it)
			if max_area < M['m00']:
				max_area = M['m00']
				max_cnt = it

(에디터가 바뀐 이후로 배경색과 색을 그대로 가져오질 못해 아쉽다)

 

2. 가상 키보드를 생성한다. 엄청 조잡한 키보드 출력문이다. 좌표를 잘 이용해서 네모를 수십개 출력시키고 숫자도 11개 출력시켜야 한다.

 

	(grabbed, frame) = camera.read()
	(grabbed, frame2) = camera.read()
	cv2.rectangle(frame2,(20,20),(350,450),(255,0,0),3)
	cv2.rectangle(frame2,(20,20),(240,343),(255,0,0),3)
	cv2.rectangle(frame2,(20,20),(130,236),(255,0,0),3)
	cv2.rectangle(frame2,(20,20),(350,127),(255,0,0),3)
	cv2.rectangle(frame2,(130,236),(350,450),(255,0,0),3)
	cv2.rectangle(frame2,(240,343),(350,450),(255,0,0),3)
	cv2.putText(frame2, '1', (65,73), font, fontScale, blue, 2)
	cv2.putText(frame2, '2', (175,73), font, fontScale, blue, 2)
	cv2.putText(frame2, '3', (285,73), font, fontScale, blue, 2)
	cv2.putText(frame2, '4', (65,180), font, fontScale, blue, 2)
	cv2.putText(frame2, '5', (175,180), font, fontScale, blue, 2)
	cv2.putText(frame2, '6', (285,180), font, fontScale, blue, 2)
	cv2.putText(frame2, '7', (65,287), font, fontScale, blue, 2)
	cv2.putText(frame2, '8', (175,287), font, fontScale, blue, 2)
	cv2.putText(frame2, '9', (285,287), font, fontScale, blue, 2)
	cv2.putText(frame2, 'open', (35,394), font, 1.0, blue, 2)
	cv2.putText(frame2, '0', (175,394), font, fontScale, blue, 2)
	cv2.putText(frame2, 'close', (245,394), font, 1.0, blue, 2)

 

엄청난 노가다성 코드...

 

3. 키보드의 좌표를 입력해둔 후 해당 좌표에 손가락이 위치해 있다면 그 숫자를 입력하는 것으로 간주한다.

 

키보드 판이 많이 작기 때문에 특정 시간 동안 가만히 머물러 있을 경우 입력하는 것으로 설정해준다.

 

		y_index = [20,127,236,343,450]
		x_index = [20,130,240,350]
		key_pad = [ [1,2,3],
					[4,5,6],
					[7,8,9],
					['open',0,'close']]
		for y in range(4):
			for x in range(3):
				if x_index[x]<=(minpoint[0]) and minpoint[0]<=x_index[x+1] and y_index[y]<=minpoint[1] and minpoint[1]<=y_index[y+1]:	
					cv2.putText(frame2, str(key_pad[y][x]), (455,73), font, fontScale, blue, 2)
					if prev == key_pad[y][x]:
						accumulate += 1
					else:
						accumulate = 0
					if flag is False:
						prev = key_pad[y][x]
		if flag is False:
			ratio = int(accumulate/0.3)
			cv2.putText(frame2, "ing.. . "+str(ratio)+"%", (455,223), font, fontScale, blue, 2)
		
		if ratio>=100 : 
			cv2.putText(frame2, str(prev)+" selected!", (425,373), font, fontScale, blue, 2)		

 

입력후 실행시키면 가상 키보드가 화면에 뜨고 손바닥을 계속 찾는 contour 가 보일 것이다.

'OpenCv > 손가락 모션 인식' 카테고리의 다른 글

OpenCV python/ hsv 를 이용한 Skin 탐지  (2) 2019.01.19
OpenCv python 도전기  (0) 2019.01.19