I4.py import time #from PARAM import * from PARAM2 import * import cv2 import numpy as np import os from time import sleep from motorm import turn import matplotlib.pyplot as plt import math import random #from LOCATE import locate from LOCREC import locate ''' ''' from tensorflow.keras.optimizers import RMSprop from tensorflow import keras import tensorflow as tf import shutil from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.layers import Flatten from tensorflow.keras.layers import Conv2D from tensorflow.keras.layers import MaxPooling2D from tensorflow.keras.layers import Dropout from tensorflow.keras.utils import to_categorical from sklearn.model_selection import train_test_split Lx=800; Ly=600; F=2; Lx2=Lx//F; Ly2=Ly//F Lx2=int(Lx/F); Ly2=int(Ly/F); Ly21=Ly2-1; X1=Lx2//8; X2=X1*2; X3=X1*3; X4=X1*4; X5=X1*5; X6=X1*6; X7=X1*7 XX1=X1*F; XX2=X2*F; XL=X3; XR=X5; image_size=128; isz=image_size #--------MODEL and PICTURE------ path='PNG'; ncat=4; nfile=20; mod1='model_THU_C.h5' ntest=20; pathT=path+'/T/' LAB=['T','H','U','O'] model = keras.models.load_model(mod1) print('load mod1=',mod1,' is done') def load_images_from_folder(folder,nfile): images = [] for filename in os.listdir(folder): img = cv2.imread(os.path.join(folder,filename), cv2.IMREAD_GRAYSCALE) if img is not None: img = cv2.resize(img,(image_size,image_size))/255 images.append(img) return np.array(images[:nfile]) def modelcheck(): pathT='PNG/T/'; netst=20; test = load_images_from_folder(pathT,ntest) print('load is done path=',pathT) X_test = test X_test = X_test.reshape(X_test.shape[0],isz,isz,1).astype("float32") print('X_test:type,len,shape=',type(X_test),len(X_test),X_test.shape) pred = np.argmax(model.predict(X_test),axis=1) print() #print(X_test) print('pred=',pred) for i in range(ntest): img = X_test[i,:,:,0] print(i,'pred[i]=',pred[i],' LAB=',LAB[pred[i]]) cv2.imshow('img',img) cv2.waitKey(0) color='green' if(color=='blue'): #-------blue---------------------- lower1=np.array([105, 100, 100]) # blue upper1=np.array([125, 255, 255]) # blue if(color=='green'): #-------green---------------------- lower1=np.array([40, 50, 80]) # blue-green upper1=np.array([90, 255, 255]) # blue-green if(color=='red'): #-------red---------------------- lower_red1=np.array([0, 150, 120]) upper_red1=np.array([10, 255, 255]) lower_red2=np.array([160, 150, 120]) upper_red2=np.array([180, 255, 255]) lower1=np.array([14,64,172]) upper1=np.array([24,255,255]) lower1=np.array([19-5,160-50,190-50]) upper1=np.array([19+5,255,255]) ############################################# def PLATS(img): imgin=np.copy(img); img1=cv2.resize(imgin,(Lx2,Ly2)) Ac=Lx2*Ly2*0.005 hsv=cv2.cvtColor(img1, cv2.COLOR_BGR2HSV) if(color == 'red'): mask1=cv2.inRange(hsv,lower_red1,upper_red1) mask2=cv2.inRange(hsv,lower_red2,upper_red2) mask=mask1 | mask2 else: mask1=cv2.inRange(hsv,lower1,upper1) mask=mask1 #cnts,_=cv2.findContours(np.copy(mask),cv2.RETR_LIST, cnts,_=cv2.findContours(np.copy(mask),cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cs=[cv2.contourArea(c) for c in cnts] lenc=len(cnts) #print('lenc=',lenc) #,'cs=',cs) masked=cv2.bitwise_and(img1, img1, mask=mask) hst1=np.vstack((img1,masked)) #cv2.imshow('masked',masked); cv2.waitKey(0) #if(lenc==0): return 0,(0,0),0,masked C=max(cnts,key=cv2.contourArea) #max()所有輪廓中取最大的 NC=0; BOX=[] for C in cnts: (x,y,w,h)=cv2.boundingRect(C); A=w*h; cx=int(x+w/2); cy=int(y+h/2); rat=w/h if(A<500): continue if(A1.2 or rat<0.1): print('error_rat=',rat); continue NC+=1 cv2.rectangle(masked,(x,y),(x+w,y+h),(200,50,50),2) cv2.circle(masked,(cx,cy),5,(255,255,255),-1) #if(cxmasked.shape[1]*0.60): DR=7 #else: DR=1 BOX.append([(x,y,w,h),(cx,cy)]) #print(NC,(x,y,w,h),(cx,cy),A,Ac) hst1=np.vstack((img1,masked)) #cv2.imshow('hst1',hst1); #cv2.waitKey(0) return BOX,hst1 #modelcheck() #input('1111') #print('CAP on...') cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080) sleep(2) LTAG=['T','H','U','O'] TARG=[LAB.index(i) for i in LTAG] print('LTAG,TARG=',LTAG,TARG) ncom=1; Hx=Ly2; Hxc=Hx//2 DX=64; DY=64; jt =0; Njt=540; NP=0; SQ=0; BK=20; NT=0; NYES=0; WDT=0; KTG=0;DR=0 while(KTG=len(LTAG)): break target=TARG[KTG] XX=[] ret,frame = cap.read(); jt+=1 frame=cv2.resize(frame,(Lx,Ly)) img=np.copy(frame) img2=cv2.resize(img,(Lx2,Ly2)) if(ret==False): break BOX,hst1=PLATS(img) NN=len(BOX) #print('NN=',NN,'BOX=',BOX) #cv2.imshow('hst1',hst1); cv2.waitKey(0) if(NN==0): print('JT=',jt,'null NN=',NN); #cv2.waitKey(0) continue #print('green_box_NN=',NN) for t in range(NN): NP+=1 (x,y,w,h),(cx,cy)=BOX[t] F1=2 x1=x*F1; x2=(x+w)*F1; y1=y*F1; y2=(y+h)*F1 dx=x2-x1; dy=y2-y1; if(dx<40): x2=x1+40 if(dy<40): y2=y1+40 cv2.rectangle(img2,(x,y),(x+w,y+h),(200,2,2),3) #cv2.rectangle(img,(x1,y1),(x2,y2),(200,2,2),10) #cv2.rectangle(img24,(x1,y1),(x2,y2),(0,120,0),2) img3=img[y1:y2,x1:x2,:] img3=cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY) #cv2.imshow('img',img); #cv2.imshow('img2',img2); fn3='PNG/R_a_'+str(NP).zfill(3)+'.png' cv2.imwrite(fn3,img3) #XX.append(img3) img4=np.copy(img3) img4=cv2.resize(img4,(image_size,image_size))/255 fimg4='fimg4_'+str(t) fn4='PNG/R_B_'+str(NP).zfill(3)+'.png' #cv2.imwrite(fn4,img4) XX.append(img4) #print(jt,' t,img3:',t,img3.shape,' BOX=',BOX[t]) #cv2.imshow('img3_'+str(t),img3); #cv2.imshow('img4_'+str(t),img4); DRS=DR #continue #cv2.waitKey(0) if cv2.waitKey(100) & 0xFF == ord('q'): break #cv2.destroyAllWindows() X_test2=np.array(XX) #print('shape_1=',X_test2.shape) X_test2=X_test2.reshape(X_test2.shape[0],isz,isz,1).astype("float32") #print('X_test2.shape=',X_test2.shape) pred2 = np.argmax(model.predict(X_test2),axis=1) #print(len(pred2),' pred2=',pred2) PLAB=[LAB[pred2[i]] for i in range(NN)] DR=0; ks=-1; kps=-1; nks=0; #if(target not in pred2): continue #print('target=',target) Ktarg=0 for k in range(len(pred2)): imgk= X_test2[k,:,:,0] #cv2.imshow('imgk_'+str(k),imgk); #cv2.imshow('imgk_'+str(k),imgk); kp=pred2[k] (x,y,w,h),(cx,cy)=BOX[k] #print('k,kp,BOX[k]=',k,kp,BOX[k]) if(kp==target): if(Ktarg==0): wt1=w; ht1=h; Ktarg=1 else: (x,y,w,h),(cx,cy)=BOX[k] if(wHxc): turn(-0.3,-0.3,2.0); turn(0,0,0.1); KTG+=1 if cv2.waitKey(500) & 0xFF == ord('q'): break cv2.destroyAllWindows() cap.release()