AI พร้อม Python - Computer Vision

การมองเห็นของคอมพิวเตอร์เกี่ยวข้องกับการสร้างแบบจำลองและการจำลองการมองเห็นของมนุษย์โดยใช้ซอฟต์แวร์คอมพิวเตอร์และฮาร์ดแวร์ ในบทนี้คุณจะได้เรียนรู้โดยละเอียดเกี่ยวกับเรื่องนี้

วิสัยทัศน์คอมพิวเตอร์

การมองเห็นด้วยคอมพิวเตอร์เป็นระเบียบวินัยที่ศึกษาวิธีสร้างใหม่ขัดจังหวะและทำความเข้าใจฉาก 3 มิติจากภาพ 2 มิติในแง่ของคุณสมบัติของโครงสร้างที่มีอยู่ในฉาก

ลำดับชั้นวิสัยทัศน์ของคอมพิวเตอร์

การมองเห็นคอมพิวเตอร์แบ่งออกเป็นสามประเภทพื้นฐานดังต่อไปนี้ -

  • Low-level vision - ประกอบด้วยภาพกระบวนการสำหรับการแยกคุณลักษณะ

  • Intermediate-level vision - รวมถึงการจดจำวัตถุและการตีความฉาก 3 มิติ

  • High-level vision - รวมถึงการอธิบายแนวความคิดของฉากเช่นกิจกรรมความตั้งใจและพฤติกรรม

Computer Vision Vs Image Processing

การประมวลผลภาพศึกษาภาพไปสู่การแปลงภาพ อินพุตและเอาต์พุตของการประมวลผลภาพมีทั้งภาพ

การมองเห็นด้วยคอมพิวเตอร์คือการสร้างคำอธิบายที่ชัดเจนและมีความหมายของวัตถุทางกายภาพจากภาพของมัน ผลลัพธ์ของการมองเห็นด้วยคอมพิวเตอร์คือคำอธิบายหรือการตีความโครงสร้างในฉาก 3 มิติ

การใช้งาน

Computer Vision ค้นหาแอปพลิเคชันในฟิลด์ต่อไปนี้ -

Robotics

  • การแปลกำหนดตำแหน่งหุ่นยนต์โดยอัตโนมัติ

  • Navigation

  • หลีกเลี่ยงอุปสรรค

  • การประกอบ (การเจาะรูการเชื่อมการทาสี)

  • การจัดการ (เช่นหุ่นยนต์บังคับ PUMA)

  • Human Robot Interaction (HRI): หุ่นยนต์อัจฉริยะเพื่อโต้ตอบและให้บริการผู้คน

Medicine

  • การจำแนกประเภทและการตรวจหา (เช่นการจำแนกรอยโรคหรือเซลล์และการตรวจหาเนื้องอก)

  • การแบ่งส่วน 2D / 3D

  • การสร้างอวัยวะใหม่ของมนุษย์ 3 มิติ (MRI หรืออัลตราซาวนด์)

  • การผ่าตัดด้วยหุ่นยนต์นำทางด้วยสายตา

Security

  • ไบโอเมตริกซ์ (ม่านตาพิมพ์ลายนิ้วมือจดจำใบหน้า)
  • การเฝ้าระวังตรวจจับกิจกรรมหรือพฤติกรรมที่น่าสงสัยบางอย่าง

Transportation

  • ยานพาหนะที่เป็นอิสระ
  • ความปลอดภัยเช่นการตรวจสอบความระมัดระวังของผู้ขับขี่

Industrial Automation Application

  • การตรวจสอบอุตสาหกรรม (การตรวจจับข้อบกพร่อง)
  • Assembly
  • การอ่านฉลากบาร์โค้ดและแพ็คเกจ
  • การจัดเรียงวัตถุ
  • ความเข้าใจเอกสาร (เช่น OCR)

การติดตั้งแพ็คเกจที่เป็นประโยชน์

สำหรับ Computer vision ด้วย Python คุณสามารถใช้ไลบรารียอดนิยมที่เรียกว่า OpenCV(วิสัยทัศน์คอมพิวเตอร์โอเพ่นซอร์ส) เป็นไลบรารีของฟังก์ชันการเขียนโปรแกรมที่มุ่งเป้าไปที่การมองเห็นของคอมพิวเตอร์แบบเรียลไทม์เป็นหลัก มันเขียนด้วย C ++ และอินเทอร์เฟซหลักอยู่ใน C ++ คุณสามารถติดตั้งแพ็คเกจนี้ด้วยความช่วยเหลือของคำสั่งต่อไปนี้ -

pip install opencv_python-X.X-cp36-cp36m-winX.whl

ในที่นี้ X แสดงถึงเวอร์ชันของ Python ที่ติดตั้งบนเครื่องของคุณเช่นเดียวกับ win32 หรือ 64 บิตที่คุณมี

หากคุณกำลังใช้ไฟล์ anaconda จากนั้นใช้คำสั่งต่อไปนี้เพื่อติดตั้ง OpenCV -

conda install -c conda-forge opencv

การอ่านการเขียนและการแสดงภาพ

แอปพลิเคชัน CV ส่วนใหญ่จำเป็นต้องรับภาพเป็นอินพุตและสร้างภาพเป็นเอาต์พุต ในส่วนนี้คุณจะได้เรียนรู้วิธีการอ่านและเขียนไฟล์ภาพด้วยความช่วยเหลือของฟังก์ชันต่างๆที่ OpenCV มีให้

ฟังก์ชัน OpenCV สำหรับการอ่านการแสดงการเขียนไฟล์ภาพ

OpenCV มีฟังก์ชันต่อไปนี้สำหรับวัตถุประสงค์นี้ -

  • imread() function- นี่คือฟังก์ชันสำหรับอ่านรูปภาพ OpenCV imread () รองรับรูปแบบภาพต่างๆเช่น PNG, JPEG, JPG, TIFF เป็นต้น

  • imshow() function- เป็นฟังก์ชันสำหรับแสดงภาพในหน้าต่าง หน้าต่างจะพอดีกับขนาดภาพโดยอัตโนมัติ OpenCV imshow () รองรับรูปแบบภาพต่างๆเช่น PNG, JPEG, JPG, TIFF เป็นต้น

  • imwrite() function- นี่คือฟังก์ชั่นสำหรับเขียนภาพ OpenCV imwrite () รองรับรูปแบบภาพต่างๆเช่น PNG, JPEG, JPG, TIFF เป็นต้น

ตัวอย่าง

ตัวอย่างนี้แสดงโค้ด Python สำหรับการอ่านรูปภาพในรูปแบบเดียวโดยแสดงในหน้าต่างและเขียนรูปภาพเดียวกันในรูปแบบอื่น พิจารณาขั้นตอนที่แสดงด้านล่าง -

นำเข้าแพ็คเกจ OpenCV ตามที่แสดง -

import cv2

ตอนนี้สำหรับการอ่านภาพใดภาพหนึ่งให้ใช้ฟังก์ชัน imread () -

image = cv2.imread('image_flower.jpg')

สำหรับการแสดงภาพให้ใช้ไฟล์ imshow()ฟังก์ชัน ชื่อของหน้าต่างที่คุณสามารถเห็นภาพได้คือimage_flower.

cv2.imshow('image_flower',image)
cv2.destroyAllwindows()

ตอนนี้เราสามารถเขียนภาพเดียวกันในรูปแบบอื่น ๆ พูด. png โดยใช้ฟังก์ชัน imwrite () -

cv2.imwrite('image_flower.png',image)

ผลลัพธ์ที่เป็นจริงหมายความว่าภาพถูกเขียนเป็นไฟล์. png ได้สำเร็จในโฟลเดอร์เดียวกัน

True

หมายเหตุ - ฟังก์ชัน destroyallWindows () เพียงแค่ทำลายหน้าต่างทั้งหมดที่เราสร้างขึ้น

การแปลงพื้นที่สี

ใน OpenCV ภาพจะไม่ถูกจัดเก็บโดยใช้สี RGB แบบเดิม แต่จะถูกจัดเก็บในลำดับย้อนกลับเช่นในลำดับ BGR ดังนั้นรหัสสีเริ่มต้นขณะอ่านภาพคือ BGR cvtColor() ฟังก์ชันการแปลงสีในการแปลงภาพจากรหัสสีหนึ่งไปเป็นรหัสสีอื่น ๆ

ตัวอย่าง

ลองพิจารณาตัวอย่างนี้เพื่อแปลงภาพจาก BGR เป็นโทนสีเทา

นำเข้าไฟล์ OpenCV แพคเกจตามที่แสดง -

import cv2

ตอนนี้สำหรับการอ่านภาพใดภาพหนึ่งให้ใช้ฟังก์ชัน imread () -

image = cv2.imread('image_flower.jpg')

ทีนี้ถ้าเราเห็นภาพนี้โดยใช้ไฟล์ imshow() จากนั้นเราจะเห็นว่าภาพนี้อยู่ใน BGR

cv2.imshow('BGR_Penguins',image)

ตอนนี้ใช้ cvtColor() เพื่อแปลงรูปภาพนี้เป็นโทนสีเทา

image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)

การตรวจจับขอบ

มนุษย์หลังจากเห็นภาพร่างคร่าวๆแล้วสามารถจดจำวัตถุหลายประเภทและท่าทางของพวกมันได้อย่างง่ายดาย นั่นคือเหตุผลที่ขอบมีบทบาทสำคัญในชีวิตของมนุษย์เช่นเดียวกับการประยุกต์ใช้การมองเห็นด้วยคอมพิวเตอร์ OpenCV มีฟังก์ชันที่เรียกว่าง่ายและมีประโยชน์Canny()สำหรับตรวจจับขอบ

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงการระบุขอบที่ชัดเจน

นำเข้าแพ็กเกจ OpenCV ดังภาพ -

import cv2
import numpy as np

ตอนนี้สำหรับการอ่านภาพใดภาพหนึ่งให้ใช้ไฟล์ imread() ฟังก์ชัน

image = cv2.imread('Penguins.jpg')

ตอนนี้ใช้ไฟล์ Canny () ฟังก์ชันสำหรับตรวจจับขอบของภาพที่อ่านแล้ว

cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300))

ตอนนี้สำหรับการแสดงภาพที่มีขอบให้ใช้ฟังก์ชัน imshow ()

cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))

โปรแกรม Python นี้จะสร้างภาพชื่อ edges_penguins.jpg ด้วยการตรวจจับขอบ

การตรวจจับใบหน้า

การตรวจจับใบหน้าเป็นหนึ่งในแอพพลิเคชั่นที่น่าสนใจของการมองเห็นด้วยคอมพิวเตอร์ซึ่งทำให้มันสมจริงและล้ำยุคมากขึ้น OpenCV มีสิ่งอำนวยความสะดวกในตัวเพื่อทำการตรวจจับใบหน้า เราจะใช้ไฟล์Haar ลักษณนามน้ำตกสำหรับการตรวจจับใบหน้า

ข้อมูล Haar Cascade

เราต้องการข้อมูลเพื่อใช้ลักษณนาม Haar cascade คุณสามารถค้นหาข้อมูลนี้ได้ในแพ็คเกจ OpenCV ของเรา หลังจากติดตั้ง OpenCv แล้วคุณจะเห็นชื่อโฟลเดอร์haarcascades. จะมีไฟล์. xml สำหรับแอปพลิเคชันอื่น ตอนนี้คัดลอกทั้งหมดเพื่อการใช้งานที่แตกต่างกันแล้ววางในโฟลเดอร์ใหม่ภายใต้โครงการปัจจุบัน

Example

ต่อไปนี้เป็นรหัส Python โดยใช้ Haar Cascade เพื่อตรวจจับใบหน้าของ Amitabh Bachan ที่แสดงในภาพต่อไปนี้ -

นำเข้าไฟล์ OpenCV แพคเกจตามที่แสดง -

import cv2
import numpy as np

ตอนนี้ใช้ไฟล์ HaarCascadeClassifier สำหรับตรวจจับใบหน้า -

face_detection=
cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/
haarcascade_frontalface_default.xml')

ตอนนี้สำหรับการอ่านภาพใดภาพหนึ่งให้ใช้ไฟล์ imread() ฟังก์ชัน -

img = cv2.imread('AB.jpg')

ตอนนี้แปลงเป็นโทนสีเทาเพราะจะรับภาพสีเทา -

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ตอนนี้ใช้ face_detection.detectMultiScaleทำการตรวจจับใบหน้าจริง

faces = face_detection.detectMultiScale(gray, 1.3, 5)

ตอนนี้วาดรูปสี่เหลี่ยมผืนผ้ารอบ ๆ ใบหน้าทั้งหมด -

for (x,y,w,h) in faces:
   img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3)
cv2.imwrite('Face_AB.jpg',img)

โปรแกรม Python นี้จะสร้างภาพชื่อ Face_AB.jpg ด้วยการตรวจจับใบหน้าดังที่แสดง

การตรวจจับดวงตา

การตรวจจับดวงตาเป็นอีกหนึ่งแอปพลิเคชั่นที่น่าสนใจสำหรับการมองเห็นด้วยคอมพิวเตอร์ซึ่งทำให้สมจริงและล้ำสมัย OpenCV มีสิ่งอำนวยความสะดวกในตัวเพื่อทำการตรวจจับดวงตา เราจะใช้ไฟล์Haar cascade ลักษณนามสำหรับการตรวจจับดวงตา

ตัวอย่าง

ตัวอย่างต่อไปนี้ให้รหัส Python โดยใช้ Haar Cascade เพื่อตรวจจับใบหน้าของ Amitabh Bachan ที่ให้ไว้ในภาพต่อไปนี้ -

นำเข้าแพ็กเกจ OpenCV ดังภาพ -

import cv2
import numpy as np

ตอนนี้ใช้ไฟล์ HaarCascadeClassifier สำหรับตรวจจับใบหน้า -

eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')

ตอนนี้สำหรับการอ่านภาพใดภาพหนึ่งให้ใช้ไฟล์ imread() ฟังก์ชัน

img = cv2.imread('AB_Eye.jpg')

ตอนนี้แปลงเป็นโทนสีเทาเพราะจะรับภาพสีเทา -

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ตอนนี้ด้วยความช่วยเหลือของ eye_cascade.detectMultiScaleทำการตรวจจับใบหน้าจริง

eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)

ตอนนี้วาดรูปสี่เหลี่ยมผืนผ้ารอบ ๆ ใบหน้าทั้งหมด -

for (ex,ey,ew,eh) in eyes:
   img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2)
cv2.imwrite('Eye_AB.jpg',img)

โปรแกรม Python นี้จะสร้างภาพชื่อ Eye_AB.jpg ด้วยการตรวจจับดวงตาดังภาพ -