You are on page 1of 47

IMAGE PROCESSING เนื้อหาคอร์ สอบรม

lesson1 Drawing
lesson2 Region-of-interest (ROI)
บทนาก่อนเข้ าเนื้อหา lesson3 Import_Img_Video_Webcam
+ INSTALL SOFTWARE lesson4 Haar_Cascade
PYTHON PYTHON เบื้องต้ น lesson5 Creat Haar_Cascade
lesson6 Resolution
Lesson7 Save Video
Lesson8 Color Track
Lesson9 Background Subtraction
Lesson10 Post Test
Lesson11 FaceRecognition
Thiraphong.thi@egat.co.th Lesson12 OCR : Tesseract
แผนก หทปอ-ห. กอง กทส-ห. ฝ่ าย อจส.
Lesson13 IP Webcam + raspberry pi
บทนาก่อนเข้ าเนื้อหา
การพัฒนาระบบ CCTV อัจฉริยะ ด้ วย Machine Learning
Image Processing ทีเ่ รานามาประยุกต์ ใช้ เป็ นแบบ Machine Learning มีด้วยกัน 2 แบบ

1.AI ทีก่ ล้ องส่ วน AI ทีอ่ ยู่ในกล้ อง

2. AI แบบอยู่ทเี่ ซิร์ฟเวอร์ หรื อ Cloud

ความหมายของ Machine Learning ในแบบพื ้นฐานที่สดุ คือ การใช้ อลั กอริธึมในการวิเคราะห์ข้อมูล เรี ยนรู้จากข้ อมูลนัน้ แล้ วทาการคาดการณ์ /ประเมินผลถึงสิ่งใดสิ่งหนึง่
เปรี ยบเทียบกับคนให้ เห็นชัดเจนขึ ้น คือการที่เราเรี ยนรู้ผ่านการเห็นสิ่งต่างๆ จึงบอกได้ ว่าอะไรเป็ นอะไร เช่น เมื่อเห็นนก เราก็รับรู้ได้ ว่ามันคือนก ไม่ว่าจะทากิริยาอะไรอยู่ ยืน หันหลัง หรื อกางปี ก
บินถือเป็ น “การฝึ ก”เครื่ องจักรให้ เรี ยนรู้ที่จะทาสิ่งใดสิ่งหนึง่ โดยเฉพาะ ผ่านการป้อนข้ อมูลจานวนมหาศาล
ระบบกล้อง CCTV ของ ม.เกษตรฯ รุ่ นทาเอง 1.AI ทีก่ ล้องส่ วน AI ทีอ่ ยู่ในกล้ อง
pi camera
712 บาท

raspberry pi 3
1,469 บาท

1,355 บาท
touch screen lcd

AI ทีก่ ล้ องส่ วน AI ทีอ่ ยู่ในกล้ องเลยจะมีข้อดี คือ คานวณในกล้ องและแสดงผลได้ เลย ส่ งเมสเสจมาบอกที่
เซิร์ฟเวอร์ กพ็ อ ว่ าตอนนีเ้ จออะไร และสั่ งการได้ (แต่ vdo stream ก็ยงั ส่ งมาได้ เหมือนแบบปกติอยู่)
กล้อง Raspberry Pi Camera Comparison ติดตั้ง PI CAMERA
Model Chipset Megapixels Advertised FOV

Raspberry Pi Camera OV5647 5MP 54° (h) x 41° (v)


A
Raspberry Pi v2 Camera IMX219 8MP 62.2° (h) x 48.8° (v)
B
Arducam 5MP RPi Camera OV5647 5MP 54° (h) x 41° (v)
C In the terminal type: “ sudo raspi-config ” & Go to Interfacing Options >>
D
Waveshare RPi Camera (I) OV5647 5MP 170°
Pi Camera >> Enable Camera , and reboot your Raspberry Pi.
Waveshare RPi Camera (J) OV5647 5MP 222°
E
Waveshare RPi Camera IR-CUT OV5647 5MP 75.7°
F
raspistill -o photo.jpg --vflip --hflip
CODE
A C F D E B raspivid -o sample.h264 -t 10000
STREAM VIDEO TO URL

Desktop
Mobile Process

Flask—Micro-framework with Python based Flask คือ framework ตัวหนึ่งแหละ ที่สามารถรันเป็ น Server ได้ มีพ้นื ฐานภาษาที่ใช้กค็ ือ ภาษา Python และแน่นอนมัน
เหมาะสมกับ Web Developer ที่ตอ้ งการความง่าย สิ่ งที่วา้ วที่สุดเลยอยูต่ รงที่ Flask เป็ น Micro-framework ตามที่ผมเข้าใจ
และตามที่ผมจะสามารถตีความได้ในตอนนี้คือ มันสามารถประกาศ เพียง 5 บรรทัด ในการสร้าง Server และหน้าเว็บ
สาหรับแสดงผลได้เลย

Installation Flask
pip install Flask
Running on http://localhost:5000/
โดยเมื่อรันเซิฟแล้ว เราจะมีเซิฟเวอร์ที่ใช้เฟรมเวิร์ก Flask รันอยูบ่ น localhost และ บนพอร์ต 5000 เอาจริ ง ๆ แล้ว การติดตั้งก็ไม่ได้ยากเกินไปนักสาหรับผูเ้ ริ่ มต้น
การพัฒนาระบบ CCTV อัจฉริยะ ด้ วย Machine Learning 2. AI แบบอยู่ทเี่ ซิร์ฟเวอร์ หรื อ Cloud
AI แบบอยูท่ ี่เซิร์ฟเวอร์ หรื อ Cloud
ข้ อดีคือ กล่ำวถือถ้ำอยูท่ ี่เซิ ร์ฟเวอร์ จะรองรับกล้องที่เป็ น IP camera ได้ทุกยีห่ อ้ ทุนจะไม่สูงมำก กำรนำ AI ไปอยูฝ่ ั่ง
เซิ ร์ฟเวอร์ กเ็ พื่อรองรับกล้องระบบเก่ำๆ
ข้ อเสี ยคือ กินกำลัง Bandwidth กำรส่ งมำก และถ้ำจำนวนกล้องมำกขึ้น ระบบเซิ ร์ฟเวอร์ กจ็ ะต้องขยำยให้มำกขึ้นและก็จะ
แพงที่ฝั่งเซิ ร์ฟเวอร์ แทน
2. AI แบบอยู่ทเี่ ซิร์ฟเวอร์ หรื อ Cloud ปัจจุบนั การเชื่อมต่อกล้องวงจรปิ ดมีหลายรู ปแบบ P2P , HTTP , TCP , UDP เป็ นต้นแต่เราจะพูดถึง การเชื่อมต่อแบบ Rtsp หรื อ Real Time
Streaming Protocol เป็ นโปรโตคอลที่ใช้รูปแบบ client/server ที่ถูกออกแบบเพื่อใช้ในการแสดงสื่ อมัลติมีเดีย สาหรับ Real Server เวอร์ชนั่ ใหม่
RTSPจะสนับสนุน SureStreamTM ซึ่งจะสามารถเลือกที่จะส่ งข้อมูลที่อตั ราความเร็วสู งที่สุดในขณะนั้นโดยอัตโนมัติ

Real Time Streaming Protocol


RTSP

ข้อมูลอ้ำงอิง
iOS
http://10.220.1.252:1935/live1/myStream/playlist.m3u8
Android/Other
CCTV ที่ไม่สามารถเรี ยกดูผ่าน RTSP ได้ ทาการ Stream ผ่าน OBS
rtsp://10.220.1.252:1935/live1/myStream
MPEG DASH
http://10.220.1.252:1935/live1/myStream/manifest.mpd
RTMP
rtmp://10.220.1.252:1935/live1/myStream
HDS
http://10.220.1.252:1935/live1/myStream/manifest.f4m
MS Smooth
http://10.220.1.252:1935/live1/myStream/Manifest
- Face Recognition คือระบบกำร
ตรวจหำใบหน้ำของมนุษย์ เทคโนโลยีการประมวลผลภาพ
และปรับภำพใบหน้ำโดยอัตโนมัติ
Image processing
- Object detection ตรวจจับกำร (Image processing)
ตรวจจับวัตถุ
การประมวลผลภาพ (Image Processing) หมายถึง การนา
ภาพมาประมวลผลหรื อคิดคานวณด้ วยคอมพิวเตอร์ เพื่อให้ ได้
- Image Processing Vehicle Counting ข้ อมูลทีเ่ ราต้ องการทั้งในเชิงคุณภาพและปริมาณ
นับจำนวนรถที่มีกำรเข้ำออก INPUT

พัฒนาโปรเจคต่ างๆ
- License Plate Recognition
จำแนกป้ำยทะเบียนรถ
อัตโนมัติ บันทึกจดจำ
ทะเบียนรถ

PROCESSING
- Lane Line Detection
ตรวจสอบระยะห่ำงของรถที่อยูใ่ น
เลนเดียวกัน

- Image Classification
กำรจำแนกข้อมูลด้ำนรู ปภำพ
OUTPUT
INSTALL SOFTWARE

INSTALL SOFTWARE
OPENCV + PYTHON
Anaconda 5.2
Python 3.6 Install
Packet Opencv
Sublime Text 3
- Python programming language) เป็ นภำษำระดับสู ง ซึ่งถูกพัฒนำขึ้นมำโดยไม่ยดึ ติดกับแพลตฟอร์ม
- OpenCV เป็ น open source library สำหรับทำงำนแนว image processing ต่ำงๆ มี interface อยูห่ ลำยภำษำให้เรำเลือกใช้ได้ (C++/Java/Python)
- Sublime Text เป็ นโปรแกรมประเภทอิดิเตอร์ที่ใช้สำหรับเขียนโค้ดโปรแกรม รอรับกำรเขียนโปรแกรมได้หลำย
ขั้นตอนติดตั้งโปรแกรม anaconda Ver. 5.2
1. เข้ำไปที่เว็บไซต์ https://www.anaconda.com/download/
2. เลือกดำวน์โหลดเวอร์ชนั สำหรับระบบปฏิบตั ิกำร Windows 6 9
3 6 คลิกที่ปุ่ม I Agree 9 เลือก Add Anaconda to my PATH environment
variable แล้วคลิกปุ่ ม Install

3. คลิกที่ปุ่ม Download (Python 3.6 version)


4 ดับเบิลคลิกไฟล์ที่ดำวน์โหลดมำเพื่อติดตั้ง Anaconda
7 10
7 เลือก All USERS (recommended)แล้วคลิกปุ่ ม Next
10 เมื่อติดตั้งเสร็ จสมบูรณ์แล้วให้คลิกปุ่ ม Next

5 8 11
5 คลิกที่ปุ่ม Next
8 คลิกที่ปุ่ม Next 11 คลิกที่ปุ่ม Finish
ขั้นตอนการติดตั้ง Sublime Text 3
Sublime Text เป็ นโปรแกรมประเภทอิดิเตอร์ที่ใช้
สำหรับเขียนโค้ดโปรแกรม รอรับกำรเขียนโปรแกรมได้หลำย
หลำยภำษำเช่น ASP, ActionScript, AppleScript, BibTeX, C,
C++, C#, CSS, Clojure, D, Diff, Erlang, Go, Graphviz, Groovy,
HTML, Haskell, JSON, Java, JavaScript, LaTeX, Lisp, Lua,

1 3
MATLAB, Markdown, OCaml, Objective-C, Objective-C++,

NEXT NEXT PHP, Pascal, Perl, Plain, Python, R, Ruby, SQL, Scala, TCL,
XML, XSL

โปรแกรม Sublime Text (ปัจจุบนั เป็ นเวอร์ชนั่ 3) สำมำรถดำวน์โหลด


ได้ที่ http://www.sublimetext.com

2 NEXT 4 INSTALL
วิธีการติดตั้ง OpenCV 3 กับ Python 3
Open เป็ น open source library สำหรับทำงำนแนว image processing ต่ำงๆ NumPy (Numeric Python) เป็ นโมดูลส่วนเสริ มของ Python ที่มีฟังก์ชนั เกี่ยวกับ
มี interface อยูห่ ลำยภำษำให้เรำเลือกใช้ได้ (C++/Java/Python) คณิ ตศำสตร์และกำรคำนวณต่ำงๆ มำให้ใช้งำน โดยทัว่ ไปจะ เกี่ยวกับกำรจัดกำร
ข้อมูลชุด (Array) ขนำดใหญ่และเมทริ กซ์
ขั้นตอนกำรติดตั้ง Packet Opencv
https://pypi.org/project/opencv-python/ https://pypi.org/project/numpy/

1 เปิ ด command prompt ตรวจสอบกำรติดตั้ง Python โดยพิมพ์ Python แล้ว Enter


เสร็จแล้ว กด Ctrl + Z เพื่อออกจำกหน้ำ Python
2 ติดตั้ง Packet Opencv โดยพิมพ์ pip install opencv-python แล้ว Enter

4 ตรวจสอบกำร ver. Opencv โดยพิมพ์ Python แล้ว Enterเสร็จแล้ว


>> import cv2
3 รอจนติดตั้งเสร็จสมบูรณ์ >>cv2.__version__
https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

เมื่อทำกำร Download ลงมำแล้วให้เรำเข้ำไปที่หน้ำ Console แล้ว เปลี่ยน


Directory ไปที่ที่เรำ Download ไฟล์ openCV.whl ไว้

pip install opencv_python-3.2.0+contrib-cp36-cp36m-win_amd64.whl


Python เป็ นภำษำที่เขียนง่ำยหรื อเรี ยกอีกอย่ำงว่ำ High Level Language Programming มีหลำกหลำย Module ในกำรเลือกใช้งำน ทั้งยังมี Third Party Software
ที่รองรับกับ Python อยูม่ ำกมำย อย่ำงเช่น OpenCV ที่เป็ น Library สำหรับกำรทำงำน Image Processing มี Function หลำกหลำย ทั้งยังเป็ นที่นิยมในหมู่นกั พัฒนำ
Software แบบ Open Source อีกด้วย ทำให้มีหลำกหลำยควำมคิดแนวทำงที่จะเรี ยนรู ้หรื อหลำยนักพัฒนำที่เสนอควำมคิดออกมำด้วยเช่นกัน
String ค่ าของมันจะอยู่ในเครื่ องหมาย Double quote ("") หรื อ Single quote ('') เรายังสามารถหาความยาวของ String โดยการใช้ ฟังก์ชันทีม่ ากับภาษา Python คือฟังก์ชัน len()
print ("Hello, world!") สาหรับหาขนาดของตัวอักษรของ String
sentent1 = 123456 s1 = 'Mountain'
sentent3 = "He said \"I would learn Python first\"." s2 = 'marcuscode'
print(sentent1) s3 = 'Python'
print(sentent3) print('length of s1 =', len(s1))
print('length of s2 =', len(s2))
เชื่ อมต่ อตั้งแต่ สอง String เข้ าด้ วยกันได้ โดยการใช้ เครื่ องหมายบวก (+)
print('length of s3 =', len(s3))
bless = 'Merry' + 'Christmas!’ เมธอด format() นั้นเราต้ องกาหนดรู ปแบบการแสดงผลให้ กบั String
print(bless)
print('a = {0}'.format(3))
String กับ Integer Floating number และ List ไปเป็ น String ด้ วย str(x) print('{0} loves to learn {1}'.format('Mateo', 'Python'))
name = 'Thiraphong ID = '
print(name + str(593684))
String คืออาเรย์ ของตัวอักษร ดังนั้นเราจึงสามารถเข้ าถึงตัวอักษรตาแหน่ งต่ างๆ ของ String ได้ # comment

comment
ผ่ านทาง Index ของมัน ด้ วยการใช้ Index ในเครื่ องหมาย [ ] (square brackets) “””
s = 'Mountain' Comment
print(s[0]) # M Comment
print(s[4]) # t Comment
print(s[7]) # n “”” PYTHON เบื้องต้ น
Python คำสัง่ กำรเงื่อนไข IF วนรอบกำรทำงำนหรื อคำสัง่ ทำซ้ ำ FOR,WHILE
เราสามารถเขียนโปรแกรม for ลูป เพื่อเรียกค่ าแต่ ละตัวแปรใน lists ได้ โดยใช้ คาสั่ ง in ดังนี้
s = 'Python' รู ปแบบของ for Loop
for
คาสั่ ง if เป็ นคาสั่ งทีใ่ ช้ ควบคุมการทางานของโปรแกรมทีเ่ ป็ นพืน้ ฐานและง่ ายทีส่ ุ ด เราใช้ คาสั่ ง if
for iterating_var in sequence:
for c in s: statements(s)
เพื่อสร้ างเงื่อนไขให้ โปรแกรมทางานตามทีเ่ ราต้ องการ
print(c) n = 11 รู ปแบบของ if
อธิบาย S มีสมาชิกเป็ น P,y,t,h,o,n แล้ วแสดงสมาชิ กทีอ่ ยู่ในขอบเขตนั้นออกมา ในตัวแปล C

animals = ['cat', 'dog', 'monkey']


if n == 10:
print('number is 10')
if expression:
statements (s) if
for animal in animals: else:
print(animal) print('number is '+str(n))
อธิบาย animals มีสมาชิกเป็ น 'cat', 'dog', 'monkey’ แล้ วแสดงสมาชิ กทีอ่ ยู่ในขอบเขตนั้นออกมา while loop เป็ นคาสั่ งวนซ้าทีง่ ่ ายและพืน้ ฐานทีส่ ุ ดในภาษา Python คาสั่ ง while loop นั้นใช้ ควบคุม
ในตัวแปล animal โปรแกรมให้ ทางานบางอย่ างซ้าๆ ในขณะทีเ่ งื่อนไขของลูปนั้นยังคงเป็ นจริงอยู่
enumerate เป็ นคาสั่ งสาหรับแจกแจงค่ า index และข้ อมูลใน index ในรู ปแบบทูเพิล (Tuple)
i=1
While
รู ปแบบของ While
ดังนี้ (Index,Value) โดยต้ องใช้ กบั ข้ อมูลชนิด list while expression:
while i <= 10: statements(s)
A = [3,6,8,2] print(i)
for Index,Value in enumerate(A): i=i+1
print("Index : "+str(Index)+" Value : "+str(Value))
lesson1 Drawing
01_frame.py

นาเข้ า Library numpy แทนค่ าด้ วย np


นาเข้ า Library vc2
สร้ าง frame ขนาด 512x512 สี ดา

แสดงภาพ (“ชื่ อframe”,frameที่จะแสดง) ผลลัพธ์


รอรับค่ าจาก Keyboard
512px

512px
ฟังก์ชัน Drawing ใน OpenCV กับ Python
02_Drawing.py มีคาสั่ งทีค่ วรรู้ ดงั ต่ อไปนี้ cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText()
เรียงสีแบบ→BGR ค่าสี RGB
# วาดเส้ นสีนา้ เงินโดยมีความหนา 5 px
ตัวอย่ าง
cv2.line(img,(15,20),(70,50),(255,0,0),5)

# วาดวงกลมปิ ดสีแดง
cv2.circle(img,(200,200), 80, (0,0,255), -1)

# วาดรูปวงรี 2 วง
cv2.ellipse(img,(200,200),(80,50),0,0,360,(0,255,0),-1)
cv2.ellipse(img,(200,200),(80,50),45,0,360,(0,0,255),1)

# วาดสี่เหลีย่ ม (แบบไม่ เต็มรูป)


cv2.rectangle(img,(15,20),(70,50),(0,255,0),3)
cv2.line(img,( Point pt1),( Point pt2),( color),thickness) parameter
# วาดสี่เหลีย่ มแบบเต็มรูป
อธิบาย
cv2.rectangle(img,(115,120),(170,150),(255,0,0),-1)
img คือ รูปภาพ
# วาดข้ อความลงไปในรูป Point pt1 คือ จุดเริ่มต้ นของเส้ นตรง
font = cv2.FONT_HERSHEY_SIMPLEX Point pt2 คือ จุดสุ ดของเส้ นตรง
cv2.putText(img,'Hello World!',(10,500), font, 1,(255,255,255),2) color คือ สีของเส้ นตรง
thickness คือ ความหนาของเส้ น
แบบทดสอบ lesson1 Drawing
1.วำดรู ป สี่ เหลี่ยมทึบ ; สี่ เหลี่ยมไม่เต็มรู ป ; ข้อควำม และใช้สีดงั แบบทดสอบ บนตำแหน่งใดบน Frame ก็ได้

Y=510 H=400

W=500

X=2
guideline 510 400
จุดยอดของสี่ เหลี่ยม จุดยอดของสี่เหลี่ยมผืนผ้ าตรงข้ ามกับ pt1
cv2.rectangle(2,510),(500,400) ,(0,0,255),1
มุมซ้ ายด้ านล่างของข้ อความในรูปภาพ
470
font = cv2.FONT_HERSHEY_SIMPLEX 500
cv2.putText(img,’Text’,(40,470), font, 1,(255,255,255),2) 40
2
วำดเส้นตรง
ใช้คำสั่ง วำดรู ปหลำยเหลี่ยม
cv2.line(img, Point pt1, Point pt2, color[,thickness[,lineType[,shift]]]) ใช้คำสัง่
อธิบำย วำดรู ปวงรี cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]])
img คือ รู ปภำพ ใช้คำสั่ง อธิบำย
Point pt1 คือ จุดเริ่ มต้นของเส้นตรง cv2.ellipse(img, center, axes, angle, startAngle, endAngle, img คือ รู ปภำพ
Point pt2 คือ จุดสุ ดของเส้นตรง color[, thickness[, lineType[, shift]]]) pts คือ อำร์เรย์ของส่ วนโค้งรู ปหลำยเหลี่ยม
color คือ สี ของเส้นตรง อธิบำย npts คือ อำร์เรย์ของเคำน์เตอร์จุดยอดของรู ปหลำยเหลี่ยม
thickness คือ ควำมหนำของเส้น img คือ รู ปภำพ ncontours คือ จำนวนของเส้นโค้ง
lineType คือ ชนิดของเส้น โดยมีชนิดของเส้นดังนี้ center คือ จุดศูนย์กลำงของรู ปวงรี isClosed คือ ตัวบ่งชี้ที่ระบุวำ่ วำดรู ปหลำยเหลี่ยมปิ ดหรื อไม่ ถ้ำจะปิ ดฟังก์ชนั วำด
LINE_8 (or omitted) - 8-connected line. axes คือ ครึ่ งหนึ่งของขนำดของแกนหลักของวงรี เส้นจำก ยอดสุ ดท้ำยของแต่ละโค้งถึงจุดสุ ดยอดก่อน
LINE_4 - 4-connected line. angle คือ หมุนมุมองศำของวงรี color คือ สี ของรู ปหลำยเหลี่ยม
LINE_AA - antialiased line. startAngle คือ องศำมุมเริ่ มต้นส่ วนโค้งวงรี thickness คือ ควำมหนำของขอบรู ปหลำยเหลี่ยม
shift คือ จำนวนเศษส่ วนบิตในพิกดั จุด endAngle คือ องศำมุมสิ้ นสุ ดส่ วนโค้งวงรี
วำดวงกลม color คือ สี ของวงรี วำดข้อควำมลงไปในรู ป
ใช้คำสั่ง ใช้คำสั่ง
วำดสี่ เหลี่ยม
cv2.circle(img, center, radius, color[, thicknes]) cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[,
ใช้คำสั่ง
อธิบำย bottomLeftOrigin]]])
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])
img คือ รู ปภำพ อธิบำย
อธิบำย
center คือ จุดศูนย์กลำงของวงกลม img คือ รู ปภำพ
img คือ รู ปภำพ
radius คือ รัศมีของวงกลม text คือ ข้อควำม
pt1 คือ จุดยอดของสี่ เหลี่ยม
color คือ สี ของวงกลม org คือ มุมซ้ำยด้ำนล่ำงของข้อควำมในรู ปภำพ
pt2 คือ จุดยอดของสี่ เหลี่ยมผืนผ้ำตรงข้ำมกับ pt1
thicknes คือ ควำมหนำของเค้ำร่ ำงวงกลม fontFace คือ ชนิดของ Font (ดูเพิ่มเติมได้จำกเอกสำรข้ำงล่ำงครับ)
color คือ สี ของสี่ เหลี่ยม
lineType คือ ชนิดของเส้น fontScale คือ ขนำด Scale ของ Font
shift คือ จำนวนเศษส่ วนบิตในพิกดั ของศูนย์กลำง และค่ำรัศมี thickness คือ ควำมหนำของเส้นใช้วำดข้อควำม
lesson2 Region-of-interest (ROI) คือบริเวณทีเ่ ราสนใจ อาจจะเป็ นบริเวณใดภายในภาพก็ได้ โดยการตีกรอบล้อมรอบบริเวณทีส่ นใจ ด้ วยวงกลม
กรอบสี่ เหลีย่ ม หรื อกรอบรู ปเหลีย่ มใดๆ เพื่อนาภาพเฉพาะส่ วนดังกล่าวมาประมวลผล หรื อเปลีย่ นแปลงภาพตามต้ องการ โดยไม่ มผี ลกระทบกับส่ วนอื่นๆ ซึ่งใน 1 ภาพ สามารถกาหนดได้ หลายๆ ROI
01_roi.py

ตัวอย่ าง ROI
Img.shape = (435, 770, 3)

213
Y
434 H
505 W

กว้ าง
สูง
X 255
แบบทดสอบ lesson2 ROI
1.สร้ำง กรอบ rectangle ครอบ Frame บริ เวณที่ตอ้ งการ จากนั้น ทาการ ROI ไปยังพื้นที่ๆ ต้องการให้แสดงภายใน frame
Img.shape = (435, 770, 3)

ผลลัพธ์แบบทดสอบ
213
Y
434 H
505 W

กว้ าง
X 255 สูง
roi =img [213:434,255:505] #= [255,255,255]#[h:y,x:w]or[h:y,w:x] or[y:h,w:x]
cv2.rectangle(img,(255,434),(505,213),(0,0,255),4)#(x,y),(w,h)
img[213-213:434-213,255-255:505-255]=roi
lesson3 Import_Img_Video_Webcam มีคำสัง่ ที่ควรรู ้ cv2.imread(), cv2.imshow() , cv2.imwrite()
cv2.IMREAD_COLOR : =1 โหลดรู ปภำพสี มีควำมโปร่ งใสของรู ปภำพ เป็ นค่ำเริ่ มต้น
cv2.IMREAD_GRAYSCALE : = 0 โหลดรู ปภำพในโหมดระดับสี เทำ (grayscale mode) คาสั่ งแสดงภาพ จาก Webcam
cv2.imread(ไฟล์รูปภำพ,ค่ำสี ) = อ่ำนไฟล์
cv2.imwrite(ชื่อไฟล์,วัตถุรูปภำพ) = เขียนไฟล์ cv2.IMREAD_UNCHANGED : =-1โหลดรู ปภำพโดยเรี ยกใช้ alpha channel
cv2.imshow(ชื่อไฟล์,วัตถุรูปภำพ) = โชว์ไฟล์
0 คือ default Webcam
คาสั่ งแสดงภาพ จากไฟล์ คาสั่ งแสดงภาพ จาก Webcam
แสดงภำพ จำก File “Video.mp4”
cap = cv2.VideoCapture(0)
img = cv2.imread('Image.jpg')
while(True): จับภาพแบบ frame by frame
cv2.imshow('img',img) แสดงภำพ
ret, frame = cap.read() คาสั่ งแสดงภาพ จากไฟล์
จบกำรทำงำน cv2.imshow('first_camera', frame)
cv2.waitKey(0) แสดงภาพ
if cv2.waitKey(1) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break หน้ าจอ จะปิ ดก็ต่อเมื่อ ผมกด q
cap.release()
03_Import_Img_Imwrite.py คาสั่ งเขียนภาพ
01_Import_Img.py cv2.destroyAllWindows()
จบการทางาน
02_Import_Webcam.py
แบบทดสอบ lesson3 Import_Img_Video_Webcam
1.นำเข้ำข้อมูลจำก webcam พร้อมบันทึกรู ปภำพโดยเรี ยงรำยชื่อรู ปภำพ (Frame1.png ถึง Frame5.png)
guideline
.format() เพื่อจัด format ในข้อควำม

if statement เอำไว้เช็คเงื่อนไขว่ำเป็ นจริ งหรื อไม่


Point = 80
if point >= 80:
print("Grade A")

os.path.join() เป็ นกำรรวม 2 string เข้ำด้วยกัน โดยมี "\\" คัน่ ระหว่ำง 2 string นั้น IMG
กำรเข้ำถึง directory ที่ตอ้ งกำร เช่น ‘C:\\Users\\Benq\\Desktop\\Software\\software\\opencv’
os.path.join('path', ‘frame')
lesson4 Haar_Cascade
Haar Cascade เป็ น feature หนึ่งในไลบรำรี่ OpenCV ที่ใช้ Detect แล้วก็ Recognize วัตถุต่ำงๆจำก Feature ที่มีอยูใ่ นรู ปนั้นๆ
กำรแบ่งพื้นที่ของภำพด้วยรู ปแบบสำเร็จรู ป 4 แบบ โดยกำหนดจำก Haar-like features ไว้ดงั รู ป ( A – B – C – D ) จำกนั้นจึงคำนวณ ตัวอย่าง Cascade.XML (Face And Eye Detector)
ตำรำงสี ของภำพโดยกำร อินทิเกรตตำรำงสี ที่อยูใ่ นพื้นที่อยูใ่ นช่องสี ขำว ลบด้วยตำรำงสี ที่อยูใ่ นพื้นที่อยูใ่ นช่องสี ดำ ในกระบวนกำร
สร้ำง รู ปอินทิกรัล แล้วนำผลที่ได้ไปใช้ใน Adaboost ที่เป็ นอัลกอริ ทึมสำหรับกำรเรี ยนรู ้แบบหนึ่ง ( Adaptive Boost Learning
Algorithm ) เนื่องจำกจำนวนข้อมูลมีจำนวนมหำศำล ( ขนำด 24 x 24 ช่อง จะมีรูปแบบที่เป็ นได้ท้งั หมด 162,336 รู ปแบบ )

ตัวอย่ าง Cascade.XML (Training)


คาสั่งแสดงภาพ จากไฟล์
01_face_detection_Img.py Face , Eye And Car Detection
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv.CascadeClassifier('haarcascade_eye.xml') นำเข้ำ Cascade
img = cv.imread('test.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 5)
for (x,y,w,h) in faces:
cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w] cv.cvtColor () กำหนดค่ำสี จำก frame เป็ น cv2.COLOR_BGR2GRAY สี แบบเทำ
roi_color = img[y:y+h, x:x+w]
สร้ำง gray frame แล้ว ให้ใช้ face_cascade และ eye cascade เพื่อตรวจจับใบหน้ำ และดวงตำ
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes: ได้รำยกำรของ frame สี่ เหลี่ยมที่จบั ได้วำ่ เป็ นใบหน้ำคน และดวงตำ เรำก็จะนำมำวำดสี่ เหลี่ยมทับ
cv.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) ไปบน frame ก่อนนำไปแสดงผลครับ
cv.imshow('img',img) แสดงผล frame ที่ถูกครอบด้วยสี่ เหลี่ยมบนใบหน้ำและดวงตำ
ส่ วนเสริ มเนื้อหำ
faces = faceCascade.detectMultiScale(
ส่ วนเสริ มเนื้อหำ
gray, #ชื่อตัวแปลที่ใช้เก็บค่ำ frame
คำสัง่ for loop for (x,y,w,h) in faces:
เป็ นคำสัง่ วนซ้ ำที่ใช้ควบคุมกำรทำงำนซ้ ำๆ ในจำนวนรอบที่แน่นอน ในภำษำ Python
scaleFactor = 1.1, #ตัวประกอบมำตรำส่ วน
นั้นคำสัง่ for loop มักจะใช้สำหรับกำรวนอ่ำนค่ำภำยในออบเจ็ค minNeighbors = 5, #บริ เวณข้ำงเคียง
minSize = (int(minW), int(minH)), )
คาสั่ งแสดงภาพ จาก Webcam 02_face_detection_Webcam.py
Face , Eye And Car Detection
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') วนดำเนินกำรนำภำพ มำแสดงที่ windows เรื่ อยๆ ก็คือกำรแสดงภำพเคลื่อนไหวนัน่ เอง
cap = cv2.VideoCapture(0) โดยจะ process frame ก่อนเพื่อแสดงเป็ นภำพขำวดำ
while (True):
ret, img = cap.read() จับภำพแบบ frame by frame
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

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


for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]

eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

cv2.imshow('face_detector', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
03_Face detection and counting.py
ภำษำ Python ไม่มีขอ้ มูลชนิดอำร์เรย์ สำมำรถใช้ list แทนได้ แต่
enumerate เป็ นคำสั่งสำหรับแจกแจงค่ำ index และข้อมูล
ใน index ในรู ปแบบทูเพิล (Tuple)ดังนี้ (Index,Value) โดยต้อง หำกใช้โมดูล NumPy เรำจะสำมำรถใช้ขอ้ มูลชนิดอำร์เรย์ได้
ใช้กบั ข้อมูลชนิด listในกำรรับค่ำข้อมูลพร้อม Index ใน List ได้ ฟังก์ชนั len() ใช้เพื่อนับจำนวนสมำชิกภำยใน List
และในกำรลูปพร้อมหำค่ำ index ของ list ในภำษำ Python

Numpy Array ที่สร้างขึ้นมา ก็จะมีคุณสมบัติ เช่น


ndarray.ndim มิติ
ndarray.shape (แถว, หลัก, จานวนชั้น)
ndarray.size จานวนสมาชิกของ Array ทั้งหมด
ndarray.dtype ชนิดของข้อมูลใน Array นั้น
ข้อมูล 11 ชุด :: มีสำมชิก 4 ตัว
แบบทดสอบ lesson4 Haar_Cascade
1.นำเข้ำกล้อง Webcam โดยแยก Frame ออกเป็ น 2Frame (Frame ที่ 1 ให้ Detect ดวงตำ ; Frame ที่ 2 ให้ Detect ใบหน้ำ)
2.นำจำนวนที่ Detect ได้ มำแสดงผลลัพธ์ภำยใน Frame
lesson5 Create Haar_Cascade
สิ่ งทีต่ ้ องเตรียม 2. คัดเลือก Img
1. Download Img
วิธีการ train cascade ด้วยตัวเองโดยสิ่ งที่ตอ้ งการมี
รูป positive
รูป negative
รู ป positive คือรู ปๆนึงที่มีวตั ถุอยูใ่ นนั้น ส่วนรู ป negative
คือรู ปที่ไม่มีวตั ถุน้ นั อยูใ่ นนั้นครับ ปกติเราจะต้องการรู ปเยอะ
พอควรเพื่อที่จะให้ Cascade ที่เรา train แล้วทางานได้ดีที่สุด
เมื่อมัน train เสร็จจะได้ file ชื่อ cascade.xml http://image-net.org/synset?wnid=n02960352
3. Train Img
ทดสอบ MY Cascade.xml
ใช้ งานได้ ใช้ งานไม่ ได้

Text ขั้นตอน
lesson6 Resolution
02_SetVideoCapture3.py
Code Resolution

def rescale_frame(frame, percent=75):


width = int(frame.shape[1] * percent/ 100)
height = int(frame.shape[0] * percent/ 100) สร้ำง Function Rescale_frame เพื่อปรับ เพิ่ม ลด ขนำดของ
dim = (width, height) frame Image ; Video
return cv2.resize(frame, dim, interpolation =cv2.INTER_AREA)
while True:
rect, frame = cap.read()
frame75 = rescale_frame(frame, percent=75) ใช้งำน Function Rescale_frame
cv2.imshow('frame75', frame75)
20% 50% 75%
frame20 = rescale_frame(frame, percent=20)
cv2.imshow('frame20', frame20)
frame50 = rescale_frame(frame, percent=50)
cv2.imshow('frame50', frame50)
แบบทดสอบ lesson6 Resolution
1.นำเข้ำ Video และใช้งำน Cascade โดยปรับ Resolution ที่ 50 %
2.สร้ำง Frame ขึ้นมำใช้งำน 2 Frame โดยแยก Frame ที่ Detect แล้วและ Frame ภำพขำวดำ
01_Save Video.py Lesson7 Save Video

cap = cv2.VideoCapture(0) ในกำรระบุ FourCC code โดยมี video codec ที่ทำงำนได้โดยไม่ได้ลง video codec เพิ่มดังนี้
fourcc = cv2.VideoWriter_fourcc(*'XVID’) บน Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2
บน Windows: DIVX, XVID
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) โดยต้องระบุ FourCC code ที่บนั ทึกลงไปด้วย และกำหนดจำนวนเฟรมต่อวินำที (fps) ขนำดของ
while(cap.isOpened()): วิดีโอcv2.VideoWriter(ชื่อไฟล์วิดีโอ,fourcc, จำนวนเฟรมต่อวินำที, (ขนำดแกน x,ขนำดแกน y))
ret, frame = cap.read()
if ret==True: เขียนไฟล์ Video
out.write(frame) ผลลัพธ์ จะได้ ไฟล์ output.avi ซึ่งบันทึกวิดโี อจากกล้ องไว้ ครับ
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
อธิบายคาสั่ งเพิม่ เติม
out.release()
คำสัง่ isOpened() เป็ นคำสัง่ สำหรับตรวจเช็คว่ำทุกอย่ำงพร้อมใช้งำน
cv2.destroyAllWindows()
หรื อไม่ โดยจะคืนค่ำบูลีน (True/False)
แบบทดสอบ lesson7 Save Video
1.นำภำพ Webcam มำผ่ำนกำร Cascade เมื่อมีกำร Detect Face ให้ทำกำรบันทึก Video ลงบน Directory File
Lesson8 Color Track
ระบบสี HSV (Hue Saturation Value) เป็ นการพิจารณาสี โดยใช้ Hue Saturation และ Value ค่ าสี HSV MIN&MAX
Hue คือ ค่าสี ของสี หลัก(แดง เขียวและน้ าเงิน)ในทางปฏิบตั ิจะอยูร่ ะหว่าง 0 และ 255(Opencv 0-180) minColor = Scalar(70, 10, 130)
ซึ่งถ้า Hue มีค่าเท่ากับ 0 จะแทนสี แดงและเมื่อ Hue มีค่าเพิ่มขึ้นเรื่ อย ๆ สี กจ็ ะเปลี่ยนแปลงไปตามสเปกตรัมของสี จนถึง 256 White maxColor =Scalar(180, 110, 255)
Saturation คือ ความบริ สุทธิ์ของสี
Value คือ ความสว่างของสี ซึ่งสามารถวัดได้โดยค่าความเข้มของความสว่างของแต่ละสี ที่ประกอบกัน minColor = Scalar(60, 110, 110)
Green maxColor =Scalar(100, 220, 250)
OpenCV จะมีการเปลี่ยนสีพ้นื ที่เพียงสองแบบที่กนั อย่างแพร่ หลายมากที่สุด BGR ↔gray และ BGR ↔ HSV
สาหรับการแปลงสี เราจะใช้ฟังก์ชนั่ cv2.cvtColor (ตัวแปร,ค่ าสี ทเี่ ปลีย่ น) ซึ่งกาหนดประเภทของการแปลง minColor = Scalar(136, 87, 111)
สาหรับการแปลง BGR →สี เทาที่เราใช้ cv2.COLOR_BGR2GRAY Red maxColor =Scalar(180, 255, 255)
ในทานองเดียวกันสาหรับ BGR → HSV เราใช้ cv2.COLOR_BGR2HSV
ระบบสี HSV Blue minColor = Scalar(110,50,50)
maxColor =Scalar(130,255,255)

minColor = Scalar(5, 150, 150)


Orange maxColor =Scalar(15, 235, 250)

minColor = Scalar(22, 60, 200)


Yellow maxColor =Scalar(60, 255, 255)

lower = {'red':(166, 84, 141), 'green':(66, 122, 129), 'blue':(97, 100, 117), 'yellow':(23, 59, 119), 'orange':(0, 50, 80)}
upper = {'red':(186,255,255), 'green':(86,255,255), 'blue':(117,255,255), 'yellow':(54,255,255), 'orange':(20,255,255)}
Lower AND Upper
# จำกัดภำพ HSV รับเฉพำะสี เหลือง
ติดตำมสี ดว้ ย OpenCV ด้วย HSV
cv2.inRange(hsv,ค่ าสี HSV ช่ วงเริ่มต้ น , ค่ าสี HSV ช่ วงสิ้นสุ ด) ในการตรวจจับวัตถุจากการติดตามสี ด้วย OpenCV กับ Python มีคาสั่ งใช้ งานดังนี้
เป็ นคาสั่งใช้ ตรวจจับสีที่อยู่ในช่ วงสี HSV ที่กำหนดครับ ในกำรกำหนดค่ำสี HSV ช่วงเริ่ มต้น - สิ้นสุด import cv2
ส่วนใหญ่จะใช้โมดูล numpy เข้ำมำช่วยเรื่ องกำรเขียนช่วงข้อมูลสี HSV ครับ import numpy as np
# Bitwise-AND mask และภำพต้นฉบับ
cap = cv2.VideoCapture(0)
cv2.bitwise_and(cv2.bitwise_and(src1, src2[, dst[, mask]])) while(1):
src1 - ชุดข้อมูลแรก
ret, frame = cap.read()
src2 - ชุดข้อมูลที่สอง # แปลงสี BGR ไปยัง HSV hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
dst - ชุดข้อมูลผลลัพธ์ที่มีขนำดและชนิดเดียวกันเป็ นชุดข้อมูลสำหรับกำรป้อนค่ำ
# ช่วงของสี เหลืองในระบบ HSV lower_yellow = np.array([10,100,100], dtype=np.uint8)
mask – เป็ นเหมือนหน้ำกำกที่รับค่ำมำรวม
upper_yellow = np.array([30,255,255], dtype=np.uint8)
คำสัง่ นี้ส่วนใหญ่มกั จะนำเฟรมปกติกบั เฟรมจำกคำสัง่ cv2.inRange()
yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)
มำรวมกันเพื่อเปรี ยบเทียบกับสี จริ ง
mask = cv2.bitwise_and(frame,frame, mask= yellow)
cv2.imshow('frame',frame)
cv2.imshow('yellow',yellow)
cv2.imshow('mask',mask)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
อธิบายเพิม่ เติม Color Track
ประกำศตัวแปรซึ่งใช้สร้ำงพื้นที่สำหรับรู ปภำพ เนื่องจำกกำรอ่ำนค่ำรู ปจำก OpenCV จะถูกเก็บในรู ปของ Numpy Array ซึ่งปกติแล้ว Array ของ Python จะเป็ น 1 มิติ เท่ำนั้น แต่
NumPy Array จะถูกออกแบบให้รองรับ Array หลำยมิติได้ ซึ่งคำสัง่ สร้ำง Aray หลักๆจะใช้คำสัง่ np.array([x],[y],[z]) สำหรับ 3 มิติ และ x,y,z เป็ นตัวเลข แต่ยงั มีคำสัง่ สำหรับ
Array พิเศษ เช่น
np.ones((row,column,chanal),dtype) สร้ำง unit matrix และ dtype เป็ นชนิดของข้อมูลในเมตตริ ก เช่น จำกโค้ด kernal = np.ones((5 ,5), "uint8")

เป็ นกำรสร้ำงตัวแปร ชื่อ “ kernel” ที่เก็บค่ำของ unit matrix 5×5


ใช้ dtype = np.unit8 ซึ่ง unit8 หมำยถึง ตัวเลข 0-255 ที่ไม่มีเครื่ องหมำย(Unsigned integer (0 to 255))
ผลลัพธ์

cv2.dilate() เป็ นกำรตรวจสอบเปรี ยบเทียบ ค่ำสี ของแต่ละ pixel ที่อยูใ่ น kernel ถ้ำมีอย่ำงน้อย 1
pixel ใน kernel ที่มีสีตรงกับสี ที่ใช้เปรี ยบเทียบจะเปลี่ยนสี ใน kernel นั้นเป็ นสี ที่ใช้เปรี ยบเทียบ
Lesson9 Background Subtraction

fgbg = cv2.createBackgroundSubtractorMOG2()
while(1):
ret, frame = cap.read()
fgmask = fgbg.apply(frame)
cv2.imshow('frame',fgmask)
k = cv2.waitKey(30) & 0xff
if k == 27:
Background Subtraction break
เป็ นเทคนิคที่ใช้ในกำรหำควำมต่ำงของเฟรม foreground กับเฟรม background โดยประโยชน์ของกำรทำ background subtraction นั้นจะ
สำมำรถบอกได้วำ่ มีวตั ถุอะไรที่กำลังเคลื่อนไหวอยูใ่ นเฟรม foreground |foreground(x,y) – background(x,y)|
เรำสำมำรถที่จะทำกำรติดตำมวัตถุ หรื อภำพเบื้องหน้ำได้วำ่ เคลื่อนที่ไปในทิศทำงใด
ภำพพื้นหน้ำ - หลัง ด้วยฟังก์ชนั เดียวคือ

createBackgroundSubtractorMOG2 ในกำรแสดงภำพแต่ละภำพ ใช้ กำรวนซ้ำตลอดเวลำ จำก while(1) และให้หยุดเมื่อกด คีย ์ ESC (k==27)
LINE Notify คืออะไร
เป็ นบริ กำรของ LINE ที่ให้สำมำรถส่งข้อควำม กำรแจ้งเตือนต่ำง ๆ ไปยังบัญชีของคุณหรื อกลุ่มต่ำงๆที่คุณอยูไ่ ด้
ผ่ำนทำง API ที่ LINE ได้เตรี ยมไว้ให้นนั่ เอง
ขั้นตอนการสมัตร LINE Notify
1
ขั้นตอนที่1 ไปที่ https://notify-bot.line.me/th แล้วกดเข้ำสู่ระบบ
ขั้นตอนที4 กดปุ่ ม “ออก Token”

จำกนั้นให้ใส่

2 4
1. ชื่อของ Token (ชื่อของ LINE Notify)
2. เลือกห้องแชทที่ตอ้ งกำรส่ งข้อควำมแจ้งเตือน
จำกนั้นกดปุ่ มออก Token เพื่อรับ Token key
ผมเลือกให้ ส่งแบบตัวต่อตัวครับ

ขั้นตอนที่2 จำกนั้น Login บัญชี LINE ด้วยอีเมลและ รหัสผ่ำน

3 5
ขั้นตอนที5 ให้คดั ลอก Token key ไว้นะครับ อย่ำเพิ่งปิ ด pop up ไม่อย่ำงนั้นต้องออก Token ใหม่
ขั้นตอนที่3 หลังจำก Login สำเร็จ ให้กดที่ลูกศรชี้ลงด้ำนข้ำงชื่อบัญชีแล้วเลือก “หน้ำของฉัน” และที่แอพ LINE จะมีบญั ชี LINE Notify แจ้งว่ำ “ ออก Personal Access Token แล้ว”
Lesson10 Post Test
ขั้นตอนกำรติดตั้ง LINE Notify

นาเข้ า LineNotify ใส่ TOKEN LINE เพื่อแจ้ งเตือน


from line_notify import LineNotify
ACCESS_TOKEN = "NbRg5NVLqTcWwQHho9VLzONV8icSdsBfmPxA4p3D7VD"ไปยัง Application Line
notify = LineNotify(ACCESS_TOKEN) เรียกใช้ ฟังก์ชั่น notify
notify.send("ยินดีดว้ ยครับ", image_path='./image/test.jpg')
print("Success")
แบบทำสอบ lesson10 Post Test
1.หลังจำกที่ติดตั้ง Packet LINE Notify เสร็ จเรี ยบร้อย ให้ทำกำรนำเข้ำ WEBCAM
แล้วทำกำร Cascade Face Detect
2. สร้ำงเงื่อนไข หำกมีกำร Face Detect ให้ทำกำรบันทึกลงบน Directory File
พร้อมทั้งส่ งกำรแจ้งเตือนผ่ำน App Line
Lesson11 FaceRecognition let’s start creating a subdirectory where we will store the trained data
create a directory where you develop your project

ผลลัพธ์
I show some tests done with this project, where I also have used photos to verify if the recognizer works
Lesson12 OCR : Optical Character Recognition
OCR : Optical Character Recognition คือซอฟแวร์ที่แปลงภาพเป็ นตัวอักษรดิจิตอล
Tesseract OCR เป็ น API ของกูเกิ้ลใช้สาหรับการทา OCR
ใช้งานง่ายมากเพียงใช้คาสัง่ tesseract ชื่อภาพ ชื่อไฟล์ชวั่ คราว -l ภาษา
ใช้ใน Python โดยการอิมพอร์ต module os มาเพื่อใช้ cmd https://github.com/tesseract-ocr/tesseract
ขั้นตอนการติดตั้ง ตัวอย่ างผลลัพธ์
Download https://github.com/UB-Mannheim/tesseract/wiki

3. เพิม่ Path ใน environment variable


2. + Additional language date (download)
เพิม่ thailand

1. Next
คาสั่ง tesseract
tesseract test.jpg output -l tha+eng

อธิบาย

Python tesseract

ภาษา

ชื่อไฟล์
Lesson13 IP Webcam + raspberry pi

Code Requests Url

URL
ขั้นตอนการติดตั้ง IP Webcam + raspberry pi
3.Copy Image address
1. โหลด App 'IP Webcam' 2.Coppy URL จากApp แล้ว Paste บนช่อง URL

5.Run Code โปรแกรม


4.Code Requests URL
IMAGE PROCESSING
ขอบคุณครับ
+
PYTHON

Thiraphong.thi@egat.co.th
แผนก หทปอ-ห. กอง กทส-ห. ฝ่ าย อจส.

You might also like