Სარჩევი:

Opencv სახის ამოცნობა, სწავლება და ამოცნობა: 3 ნაბიჯი
Opencv სახის ამოცნობა, სწავლება და ამოცნობა: 3 ნაბიჯი

ვიდეო: Opencv სახის ამოცნობა, სწავლება და ამოცნობა: 3 ნაბიჯი

ვიდეო: Opencv სახის ამოცნობა, სწავლება და ამოცნობა: 3 ნაბიჯი
ვიდეო: CS50 2014 - Week 7, continued 2024, ნოემბერი
Anonim
Opencv სახის ამოცნობა, სწავლება და ამოცნობა
Opencv სახის ამოცნობა, სწავლება და ამოცნობა

OpenCV არის ღია კოდის კომპიუტერული ხედვის ბიბლიოთეკა, რომელიც ძალიან პოპულარულია სურათის დამუშავების ძირითადი ამოცანების შესასრულებლად, როგორიცაა დაბინდვა, სურათის შერწყმა, სურათის გაძლიერება, ასევე ვიდეოს ხარისხი, ბარიერი და ა.შ. მოდელები, რომლებიც შეიძლება გამოყენებულ იქნას უშუალოდ მარტივი ამოცანების გადასაჭრელად.

opencv ინსტალაციისთვის გამოიყენეთ ეს ბმული

www.instructables.com/id/Opencv-and-Python…

ნაბიჯი 1: სახის გამოვლენა რეალურ დროში ვიდეოში

თქვენ შეგიძლიათ მოძებნოთ google მრავალი სახის ამოცნობის პროგრამა და აღმოჩენილი სახეები უნდა იყოს შენახული საქაღალდეში სურათების შემდგომი დამუშავებისათვის, როგორიცაა ტრენინგი და მარკირება. ჩვენ ვაპირებთ 30 ნიმუშის შეგროვებას

იმპორტი cv2

იმპორტირებული numpy როგორც np

იმპორტი os იმპორტი sys

კამერა = cv2. ვიდეო გადაღება (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml") #დაამატეთ თქვენი harcascade ფაილის გზა

name = raw_input ("რა ჰქვია მას?")

#ყველა ფაილი შეინახება Users/prasad/Documents/images საქაღალდეში

dirName = "/მომხმარებლები/prasad/დოკუმენტები/სურათები/" + სახელი

დაბეჭდე (dirName) თუ არა os.path.არსება (dirName): os.makedirs (dirName) print ("დირექტორია შეიქმნა") სხვაგან: print ("სახელი უკვე არსებობს") sys.exit ()

დათვლა = 1

#ჩვენ ვაპირებთ 30 ნიმუშის შეგროვებას

ხოლო რაოდენობა 30: შესვენება # ჩარჩო = ჩარჩო. მასივი ნაცრისფერი = cv2.cvtColor (ჩარჩო, cv2. COLOR_BGR2GRAY) სახეები = faceCascade.detectMultiScale (ნაცრისფერი, 1.5, 5) for (x, y, w, h) სახეებში: roiGray = ნაცრისფერი [y: y + h, x: x + w] ფაილის სახელი = dirName + "/" + სახელი + str (რაოდენობა) + ". jpg" cv2.imwrite (ფაილის სახელი, roiGray) cv2.imshow ("სახე", roiGray) cv2. rectangle (frame, (x, y), (x+w, y+h), (0, 255, 0), 2) count+= 1 cv2.imshow ('frame', frame) key = cv2. დაელოდეთ გასაღები (1)

თუ გასაღები == 27:

შესვენება

#camera.release ()

cv2.destroyAllWindows ()

ნაბიჯი 2: თქვენი ნიმუშის სურათების მომზადება

მას შემდეგ რაც დასრულდა სახის ამოცნობა, ჩვენ შეგვიძლია წვრთნათ სურათები

იმპორტი osimport numpy როგორც np საწყისი PIL იმპორტი სურათი იმპორტი cv2 იმპორტი მწნილი #იმპორტი სერიალი

#ser = სერიული. სერიული ('/dev/ttyACM0', 9600, ვადა = 1)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

აღიარებელი = cv2.face. LBPHFaceRecognizer_create ()

baseDir = os.path.dirname (os.path.abspath (_ ფაილი_))

#მოამზადეთ სურათები სურათების საქაღალდის ქვეშ

imageDir = os.path.join (baseDir, "სურათები")

currentId = 1

labelIds = {} yLabels = xTrain = #ser.write ("ტრენინგი…..". კოდირება ())

root, dirs, os.walk ფაილებისთვის (imageDir):

ამობეჭდვა (root, dirs, ფაილები) ფაილებისათვის: ამობეჭდვა (ფაილი) თუ file.endswith ("png") ან file.endswith ("jpg"): path = os.path.join (root, file) label = os.path.basename (root) ბეჭდვა (ეტიკეტი)

თუ ეტიკეტი არ არის labelIds- ში:

labelIds [label] = currentId ბეჭდვა (labelIds) currentId += 1

id_ = labelIds [label]

pilImage = Image.open (path).convert ("L") imageArray = np.array (pilImage, "uint8") face = faceCascade.detectMultiScale (imageArray, scaleFactor = 1.1, minNeighbors = 5)

for (x, y, w, h) სახეებში:

roi = imageArray [y: y+h, x: x+w] xTrain.append (roi) yLabels.append (id_)

ღია ("ეტიკეტები", "wb") როგორც f:

pickle.dump (labelIds, f) f.close ()

ამოცნობა. მატარებელი (xTrain, np.array (yLabels))

ამოცნობა (შენახვა ("trainer.yml") ბეჭდვა (labelIds)

ნაბიჯი 3: სახის ამოცნობა

ტრენინგის დასრულების შემდეგ, თქვენ შეგიძლიათ გაუშვათ ქვემოთ მოყვანილი კოდი ისე, რომ ის დაიწყოს თქვენი გაწვრთნილი სახეების ამოცნობა

იმპორტი osos.environ ['PYTHONINSPECT'] = 'on' იმპორტი cv2 იმპორტი numpy როგორც np იმპორტი მწნილი #იმპორტი RPi. GPIO როგორც GPIO დროიდან იმპორტი ძილის

ღია ('ეტიკეტები', 'rb') როგორც f:

dicti = pickle.load (f) f.close ()

კამერა = cv2. ვიდეო გადაღება (0)

faceCascade = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml")

აღიარებელი = cv2.face. LBPHFaceRecognizer_create () ამოცნობა. წაკითხვა ("trainer.yml")

font = cv2. FONT_HERSHEY_SIMPLEX

ბოლო ="

#for frame in camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True):

ხოლო True: ret, frame = camera.read () ნაცრისფერი = cv2.cvtColor (ჩარჩო, cv2. COLOR_BGR2GRAY) სახეები = faceCascade.detectMultiScale (ნაცრისფერი, scaleFactor = 1.5, წთ მეზობლები = 5) (x, y, w, h) სახეებში: roiGray = ნაცრისფერი [y: y+h, x: x+w]

id_, conf = ამოცნობა. წინასწარმეტყველება (roiGray)

სახელი, მნიშვნელობა dicti.items ():

თუ მნიშვნელობა == id_: ბეჭდვა (სახელი) cv2.putText (ჩარჩო, სახელი, (x, y), შრიფტი, 2, (0, 0, 255), 2, cv2. LINE_AA) თუ სახელი! = ბოლო: ბოლო = სახელი თუ conf <= 70: cv2. მართკუთხედი (ჩარჩო, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.imshow ('ჩარჩო', ჩარჩო)

გასაღები = cv2.waitKey (1)

თუ გასაღები == 27:

შესვენება cv2.destroyAllWindows ()

გირჩევთ: