น้องเจและสายอากาศของเขา — มาทำบอททำนายประเภทสายอากาศกันเถอะ

Metanon Jongkraijak (Ake)
3 min readMar 6, 2021

--

ท่านกำลังประสบปัญหาในการเลือกสายอากาศอยู่รึเปล่า จะดีหรือไม่ถ้ามี Chatbot มาช่วยอธิบายข้อมูลสายอากาศให้ท่านฟัง

Highlights

  • ปัญหาและไอเดียของน้องเจ เมื่อเค้ารู้สึกขี้เกียจ และอยากสร้างตัวช่วยในการให้ข้อมูลสายและเสาอากาศ
  • เรื่องเล่าสัปดาห์แรกในการเรียน Computer Vision ซึ่งเรียนเกี่ยวกับ Image Classification เล่าในแบบฉบับรวบรัดตัดตอน (ขี้เกียจนั่นแหละ)
  • แชทบอทสุดเจ๋งที่อวยกลุ่มตัวเองไว้ก่อนว่ามันดีจริงๆนะ
Source: https://pantip.com/topic/35161228

อย่าถามว่ากลุ่มนี้จะไปรอดไหม…ผมไม่รู้ (อุ๊ย)

เรื่องเล่าของน้องเจ

วันนี้กลับมาบ้านต่างจังหวัดในวันหยุดพักผ่อนตามภาษาคนขี้เกียจ…อยู่ๆวันนี้เจ้ากล่อง stream กลับมาพังซะงั้น…. เลยอยากดูทีวีแก้เซง แก้เหงาได้บ้าง (เหงาแหล่ะดูออก) ก็เลยสวมวิญญาณช่างติดจานดาวเทียม!!!เอ้ย ไม่ใช่ ช่างติดแผงทีวีดิจิตอลก็พอแล้ว เพราะทั้งต้นทุนต่ำกว่าด้วย เลยออกไปซื้อของ อันประกอบไปด้วย สายอากาศ….แต่เอ๊ะ? เรามันก็ไม่ใช้ผู้เชี่ยวชาญในเรื่องสายอากาศซะด้วย แล้วจะเลือกตัวไหน ประเภทไหนดีละเนี่ยะโอ้ยยปวดหัว… คนมันขี้เกียจสันหลังยาวซะด้วยอยากหาตัวช่วยมาบอกว่าอันนี้สายอากาศประเภทไหน ใช้ยังไง รับได้ไกลกี่กิโล อะไรพวกนี้ พอดีมีเพื่อนข้างบ้านเห็นก็อยากติดตั้งและอยากรู้ประเภทสายอากาศ

นึกไอเดียขึ้นได้ เห้ย…ไหนๆเราก็เคยเรียนคลาสสุดจ๊าบ อย่าง Image Classification กับผู้เชี่ยวชาญของ Botnoi …….ทำไม?ทำไมล่ะ เราน่าจะหาผู้ช่วยได้นิหน่า นี้ไง ฟิ้ววว..เสียงบางอย่างราวกับสมองได้รับพรจากพระเจ้า เราก็สร้างบอทที่แบบเอ้ออโยนรูปภาพเข้าไปแล้วให้บอทเนี่ยะ ทำนายว่า เจ้าสายอากาศที่ให้ดู มันคือสายอากาศประเภทไหนกันนะ …… ที่นี้ละ ไอเดียจากสมองอันหลั่งไหลแบบไม่หยุดเหมือนน้ำตกไนแองกีล่า พ่ามๆๆไม่ใช่ล่ะ

โอเคเรามาต่อแล้วเราจะรู้ได้ไงล่ะว่า สายอากาศแต่ละประเภทเป็นยังไง ก็ Research ซิฮะ รออะไร…. จากการ Research ก็ได้ข้อมูลของประเภทสายอากาศมีทั้งแบบ ยากิอูดะ แบบ indoor reception และ omni antenna แต่ละอย่างก็จะมีระยะการรับสัญญาณที่แตกต่างกันไป ที่นี้ถ้าเราอยากรู้ว่าจะรับสัญญาณจากสถานีส่งสัญญาณไหนดีที่อยู่ใกล้ตัวเรามากที่สุด ………บังเอิญเลยได้ข้อมูลจากเพื่อนที่ทำงานอยู่ทางด้านการออกอากาศทีวีดิจิตอล จึงได้ข้อมูลพิกัดที่ตั้งของสถานีส่งสัญญาณทั่วประเทศ เพื่อที่เราจะได้รู้นำมาคำณวนระยะห่างระหว่างเรากับสถานีด้วย ….เอาล่ะ เท่านี้ dataset เราก็พร้อมล่ะในการสร้างผู้ช่วยอัจฉริยะที่จะมาบอกได้ว่า สายอากาศประเภทไหนจากรูปภาพที่คุณส่งไป และคำณวนระยะห่างกับสถานีส่งสัญญาณ ว้าวว…อยากรู้แล้วว่าต้องทำยังไงบ้างไปต่อกันเลย….

สัปดาห์แรกกับ Image Classification

ในกระบวณการทางด้าน Data Sci ผมเชื่อว่าเราสามารถหาข้อมูลอ่านประกอบได้เยอะเลย ดังนั้นมาเจาะในสิ่งที่พวกเราทำดีกว่าครับ ไม่ต้องพูดเยอะครับ เราเน้นง่าย และอยากได้ต้องลงมือทำ ขอแบ่ง Step เป็น 3 ขั้น

1)Image Collection
แน่นอนว่าการได้มาซึ่งข้อมูลก็มีหลายวิธี ไม่ว่าคุณจะมีรูปภาพเหล่านั้นอยู่แล้ว ทำ Web Scraping บลาๆๆ ด้วยข้อจำกัดโดยเฉพาะเวลา น้องเจจึงเลือกใช้ library ของ botnoi ที่ช่วยในการทำ Web Scape เพื่อดึงรูปภาพเสาอากาศแต่ละประเภทไว้อย่างละ 100 รูป

2) Feature Extraction
ถัดมาการแยก หรือดึงคุณลักษณะของภาพให้อยู่ในรูปแบบขอตัวเลข เพื่อที่จะนำไปใช้ในการ Train Model แน่นอนว่ากระบวณการนี้สำคัญมาก แต่ในงานด้าน Computer Vision ช่วงหลังๆ ค่อนข้างที่จะมี Standard Pipline ทำให้ชีวิตง่ายขึ้น

จงจำไว้คุณใช้กระบวณการใดในการทำ Feature Extraction ก่อนการ Train Model คุณจะต้องทำ Feature Extraction แบบเดียวกันนั้นกับ Input ก่อนการทำนายเช่นกัน…เพราะน้องเจก็ติดอยู่ตรงนี้เช่นกัน ถือเป็นการเรียนรู้ที่ดีครับ

เราเลือกที่จะใช้ RestNet-50 ซึ่งเป็น Pre-train model (ImageNet) ในการทำ Feature Extraction แน่นอนว่าทุกอย่างจบด้วย botnoi library อีกแล้วครับท่าน (ของเค้าดี) โดยเราทำการ save ค่าที่ได้จากการดำเนินการให้อยู่ในรูปแบบของ pickle file

หลังจากที่เราได้ค่าจากการทำ Feature Extraction แล้วก็จัดแจงสร้าง DataSet ที่มีการ Mapping ข้อมูล Feature กับ Label เข้าด้วยกัน เพียงเท่านี้ก็พร้อมแล้วที่จะสร้าง Model กัน

3) Train & Test Model
มาถึงส่วนสำคัญกันเนอะก่อนที่เราจะทำการ Train Model สิ่งที่ทุกคนทราบดีคือ เราควรจะมีการจัดเตรียมข้อมูลที่ใช้ใน train และข้อมูลสำหรับการ test ทั้งนี้ก็ขึ้นอยู่กับผลลัพท์ที่ต้องการแหละ ก็เตรียมให้มันเหมาะสมเนอะ ในการส่งงานชิ้นนี้ก็เข้าใจว่าไม่ซีเรียสอะไรมากเอาให้เห็น Concept ซึ่งเราเองก็เลือกที่จะไม่ฉีกจากบทเรียนครับ ส่วน Algorithm ที่เราเลือกใช้ในการ Fit สำหรับ Model นั้น คือ LinearSVC (Linear Support Vector ClassificationTest Model) ก็จาก library เจ้าประจำครับ botnoi ใช่ไหม ผิดคร้าบ! scikit-learn ต่างหากละ และเราก็ทำการ save model เป็น pickle file อีกครั้ง ไปพร้อมกับการหา accuracy ไปพร้อมๆกัน ซึ่งเอาจริงๆนะ ไม่อยากโชว์ผลหรอก เพราะรู้ดีกว่าที่ทำๆอยู่เนี่ยเอา Concept จ้า ถ้าจะให้สนใจที่จะต่อยอด หรือทำให้มันได้มาตรฐานหน่อยก็คงต้องปรับปรุงในทุกจุดของกระบวณการ

จากทั้ง 3 Steps ทุกคนก็เป็นการอธิบายกระบวณการคร่าวๆ ในสิ่งที่พวกเราทำ ซึ่งก็เป็นเรื่องปกติอยู่แล้วเนอะใครๆก็ทำได้เนอะ

Colab ที่ใช้ในการทำทั้ง 3 Steps

เครดิตในการทำ Model ส่วนนี้ก็ยกให้น้องเจนะครับ

มี Model แล้วใช้ยังไงอะ

มา!!เชื่อว่าหลายคนมีไอเดียเยอะเลยแหละ พอมี Model อยู่ในมือละ แต่ไม่รู้จะนำมันไปใช้อย่างไร คำแนะนำเลยครับนำไปสร้างเป็น APIs เพราะมันรองรับการใช้งานจากทุก Platform เลยก็ว่าได้ไม่ว่าจะเป็น Web Site, Mobile App. และอื่นๆตามใจอยาก มาดูสิ่งที่พวกเราทำกัน

Heroku เจ้าพ่อ Server ทุกสถาบัน (หร๋อ)

เราเลือกใช้ Heroku ในการ Deploy และ Host APIs มาดูกันว่าทำไม

  • มันง่ายดีนะสำหรับคนที่ไม่สามารถ Setup Server ได้ด้วยตัวเอง
  • รองรับ HTTPS ด้วยปัจจุบันจะทำเว็บ ทำ APIs จะต้องเป็น HTTPs ทั้งหมดแล้วซึ่งถ้าต้องทำเองก็ยากแหละ ไม่เชื่อก็ลองดูได้
  • การรัน Model เล็กๆอย่างโปรเจคนี้สบาย แต่อย่ายิง load เข้ามานะไม่รอด
  • ข้อเสียก็มีแหละ เพราะมันไม่ได้คงสถานะ live ตลอดเวลา ต้องปลุกมันหน่อยเมื่อไม่มีใครใช้ และนั่นแหละ Model ใหญ่หน่อยไม่ได้ตายแน่ๆ

ทำ Flask ทำไมไม่ FastAPI

สั้นๆ เลยนะ ยังไม่ว่างเปลี่ยนตัวเองไปใช้ FastAPI ในการทำ APIs ดีแค่ไหนแล้วที่ไม่ใช้ Django REST Framework (พอดีงานช่วงนี้ใช้ Django) แต่ก็ไม่ได้มีผลกับ Performance ในตอนนี้เพราะมันไปขึ้นกับ Server เป็นหลักแหละ

แต่มาถึงตรงนี้หลายคนยังงงอยู่ว่าชื่อต่างๆที่ถูกอ้างถึงมัน คืออะไร ผมก็จะบอกให้ ทั้งหมดคือ Framework ที่ใช้ในการสร้าง Web App หรือ APIs ซึ่งใช้ภาษา Python เลย โดยที่เจ้าตัว Flask มันจะเป็นลักษณะ Micro-Framework เพราะมันมีขนาดเล็ก (light-weight) และไม่จำเป็นต้องพึ่งพา library อะไรมากเราก็สามารถสร้าง APIs ได้ละ ส่วนตัว FastAPI ช่วงหลังถูกพูดถึงเยอะมากด้วยข้อดีต่างๆ (ไปศึกษาเอานะว่ามันดียังไง) คนก็เลยเหมือนแห่กันไปใช้แหละ

เอาเป็นว่าไปศึกษาโค้ด APIs ของโปรเจคนี้กันได้ที่ https://github.com/imetanon/nearest-api (ชื่อ Project ดูไม่สอดคล้องกับงานนะ เพราเดิมตั้งใจจะเขียนแยกเพื่อหาสถานีฐานแต่สุดท้ายมัดรวมกับเรื่อง Model เลยละกัน)ไม่มีอะไรยากเลย ลองอ่านดูก่อนไม่เข้าใจให้มาถาม

Chatbot หน่อยไหม

โจทย์ประจำสัปดาห์นี้ให้ส่งงานนอกจาก medium ละก็มี Chatbot นี่แหละที่จะแสดงให้เห็นถึงการใช้ Model APIs ได้ดีเลยละแน่นอนว่าเรามีเครื่องมือ NLP ดีๆจากทางบอทน้อยไว้ให้ใช้สร้างบอทครับผม ไปสมัครใช้กันได้นะ version SME ตอนนี้เข้าใจว่าทีมบอทน้อยยังให้ใช้ฟรีอยู่ครับ (เก็บเงินเมื่อไหร่ก็เจรจากับพี่วินเจ้าพ่อบอทน้อยดูนะครับ เค้ามี version enterprise ด้วย)

ทำ Chatbot ทั้งทีทำให้มันดูมีความสามารถเยอะๆหน่อย

จากภาพข้างต้นอธิบายการทำงานของ Chatbot ตาม Intent ที่น้องบอทรองรับดังนี้

  1. Intent ถามตอบทั่วไปในกรณีที่มีการ train ไว้ก็จะตอบได้ แต่ถ้าไม่ได้ train ไว้เราก็เชื่อมต่อ openapi ของบอทน้อย เพื่อให้น้องบอทของรับรองรับในสถานการณ์ที่หลากหลายได้ แต่เข้าใจว่าหลายคนๆก็อาจจะบ่นว่ามันยังดูโง่ๆนะ (ซึ่งเราจะ train ให้มันฉลาดขึ้นเรื่อยๆละกัน)
  2. Intent ในการทำนาย นอกจากจะใส่เรื่องของ Image Classification Model APIs แล้ว เรายังใส่ในส่วนของการหาสถานที่ที่อยู่ใกล้ตัวคุณ ในบริบทของการใช้ตรวจสอบว่าอุปกรณ์สายอากาศที่คุณใช้จัดอยู่ในประเภทไหนแล้ว ยังช่วยเช็คด้วยว่ามีสถานีฐานที่ใกล้กับเราบ้างไหม แล้วไปด้วยกันได้กับอุปกรณ์ที่มีไหม คิดว่าคงได้เขียนบทความเป็น Side Story ให้ได้อ่านนะครับ

อย่ารอช้า!!! ลองเล่นดูแล้วจะเข้าใจ add bot ของเราด้วย LINE ของคุณด้วย คลิกเลย ->https://lin.ee/4V4t26D หรือ Scan ผ่าน QR Code

บทสรุปแบบจริงจัง

  • แน่นอนว่าเพื่อให้ผลลัพธ์ที่ดีในกระบวนการของ Data Sci ไม่ว่าคุณจะทำเรื่องอะไร คุณจะต้องเตรียมทุกๆอย่างให้ดีกว่านี้ ทั้งตัวข้อมูลตั้งต้น การประมวลผล วิธีที่การที่เลือกใช้ และวัดผลมันแบบจริงจัง
  • สำหรับในการเรียนใน Class — Computer Vision นี้จากการประชุมกลุ่มเข้าใจว่าทุกคนติดภาระกิจอาจจะไม่ค่อยสะดวกทำงานกลุ่ม แต่เพื่อให้เป็นสิริมงคลจึงเกิดบทความนี้ขึ้นมา และหวังเป็นอย่างยิ่งว่าจะมีบทความรวมถึงงานส่งในสัปดาห์ถัดๆไปของการเรียน
  • จุดที่ทุกคนต่างประทับใจในการทำงานครั้งนี้ คือ การได้มาแชร์ มาเก็บตกรายละเอียดนอกจากที่เรียนในห้องเรียน และได้รู้จักกัน
  • บทความนี้เราต้องการสร้างความแตกต่างจากการนำเสนอเรื่องที่มันจริงจัง โดยลดความจริงจังลง เน้นความบ้า และฮาเข้าว่า ซึ่งหวังเป็นอย่างยิ่งว่าทุกคนจะสนุกไปกับบทความนี้แล้วรอติดตามพวกเราในบทความถัดๆไปนะ ส่งกำลังใจมาด้วยละ

Our Crew — BotnoiCV-G10

พี่ซิ, พี่เบิร์ด, เอก (ผมเอง), น้องเจ, พี่อาร์ต, พี่เบส, พี่น้ำตาล

แถมท้าย

ใครยังรู้สึกไม่จุใจกับบทความข้างต้นกลุ่มเรามีอีก 1 บทความสำหรับสัปดาห์นี้ครับ

Reference — อ้างอิง

--

--