ການປົດລັອກຄວາມສາມາດ Multi-Modal ໃນ Gemini API: ການວິເຄາະຮູບພາບ ແລະ ວິດີໂອ
ການປົດລັອກຄວາມສາມາດ Multi-Modal ໃນ Gemini API: ການວິເຄາະຮູບພາບ ແລະ ວິດີໂອ
ລອງນຶກພາບເບິ່ງວ່າ: ຖ້າທ່ານກຳລັງສ້າງແອັບພລິເຄຊັນຊ່ວຍເຫຼືອຊາວກະສິກອນຢູ່ເມືອງປາກຊ່ອງ ທີ່ສາມາດຖ່າຍຮູບໃບກາເຟແລ້ວໃຫ້ AI ບອກໄດ້ທັນທີວ່າເປັນພະຍາດຫຍັງ, ຫຼື ສ້າງລະບົບວິເຄາະວິດີໂອກ້ອງວົງຈອນປິດ (CCTV) ຢູ່ສີ່ແຍກໄຟແດງນະຄອນຫຼວງວຽງຈັນ ເພື່ອສັງເກດການຈະລາຈອນວ່າລົດຕິດຂັດຊ່ຳໃດ ໂດຍທີ່ບໍ່ຕ້ອງຂຽນໂມເດລ Machine Learning ເອງຕັ້ງແຕ່ຕົ້ນ. ສິ່ງເຫຼົ່ານີ້ເປັນໄປໄດ້ແລ້ວໃນປັດຈຸບັນດ້ວຍ ໂມເດລ Multi-Modal.
ມື້ນີ້ເຮົາຈະມາລົງເລິກວິທີການນຳໃຊ້ Google Gemini API ເຊິ່ງມີຄວາມສາມາດດ້ານ “Multi-Modal” (ຮອງຮັບທັງການຮັບຂໍ້ມູນທີ່ເປັນ ຂໍ້ຄວາມ, ຮູບພາບ ແລະ ວິດີໂອ ໃນເວລາດຽວກັນ). ສຳລັບນັກພັດທະນາ (Developers) ລະດັບກາງ ທີ່ຄຸ້ນເຄີຍກັບ Python ແລ້ວ ບົດຄວາມນີ້ຈະພາທ່ານຂຽນໂຄ້ດສົ່ງຮູບພາບ ແລະ ດຶງເຟຣມ (Frames) ຈາກວິດີໂອສົ່ງໃຫ້ API ປະມວນຜົນແບບ Step-by-Step.
ສິ່ງທີ່ຕ້ອງກຽມກ່ອນເລີ່ມຕົ້ນ (Prerequisites)
ກ່ອນອື່ນໝົດ, ໃຫ້ແນ່ໃຈວ່າທ່ານມີ:
- ກະແຈ Gemini API Key (ສາມາດເຂົ້າໄປສ້າງໄດ້ຟຣີທີ່ Google AI Studio).
- ຕິດຕັ້ງ Python 3.9 ຂຶ້ນໄປ.
- ຕິດຕັ້ງ Libraries ທີ່ຈຳເປັນ: ເຮົາຈະໃຊ້
google-generativeaiສຳລັບເອີ້ນ API,Pillowສຳລັບຈັດການຮູບພາບ ແລະOpenCVສຳລັບຈັດການວິດີໂອ.
ເປີດ Terminal ແລ້ວພິມຄຳສັ່ງຕິດຕັ້ງດັ່ງນີ້:
pip install google-generativeai pillow opencv-python
ກໍລະນີສຶກສາທີ 1: ສົ່ງຮູບພາບເຂົ້າລະບົບ (ຮູບພາບໃບກາເຟຈາກປາກຊ່ອງ)
ໃນການນຳໃຊ້ Multi-Modal ກັບຮູບພາບ, ພວກເຮົາພຽງແຕ່ໂຫຼດຮູບພາບຜ່ານ Pillow ແລ້ວແນບໄປພ້ອມກັບ Prompt (ຄຳສັ່ງເປັນຕົວໜັງສື).
ລອງເບິ່ງຕົວຢ່າງໂຄ້ດລຸ່ມນີ້ ເຊິ່ງເຮົາຈະຈຳລອງການກວດສອບພະຍາດໃບກາເຟ:
import google.generativeai as genai
from PIL import Image
# 1. ຕັ້ງຄ່າ API Key ຂອງທ່ານ (ຄວນເກັບໄວ້ເປັນ Environment Variable ເພື່ອຄວາມປອດໄພ)
genai.configure(api_key="ປ່ຽນເປັນ_API_KEY_ຂອງທ່ານ")
# 2. ເລືອກນຳໃຊ້ໂມເດລ ທີ່ຮອງຮັບ Multi-Modal
# (ແນະນຳໃຫ້ໃຊ້ gemini-1.5-flash ເພາະໄວ ແລະ ປະຢັດ, ຫຼື gemini-1.5-pro ສຳລັບວຽກວິເຄາະທີ່ຊັບຊ້ອນ)
model = genai.GenerativeModel('gemini-1.5-flash')
# 3. ໂຫຼດຮູບພາບຈາກເຄື່ອງຂອງທ່ານ
img_path = "paksong_coffee_leaf.jpg"
image_payload = Image.open(img_path)
# 4. ສົ່ງ Prompt ທີ່ເປັນຂໍ້ຄວາມ ພ້ອມກັບ ຮູບພາບ ເຂົ້າໄປໃນ Model
prompt_text = """
ເຈົ້າເປັນຊ່ຽວຊານດ້ານກະສິກຳ.
ກະລຸນາວິເຄາະຮູບພາບໃບກາເຟນີ້ວ່າ ມີອາການຕິດເຊື້ອລາ (Rust) ຫຼື ພະຍາດອື່ນໆຫຼືບໍ່?
ແລະ ແນະນຳວິທີການປິ່ນປົວເບື້ອງຕົ້ນສຳລັບຊາວກະສິກອນ.
"""
response = model.generate_content([prompt_text, image_payload])
# ເບິ່ງຜົນກວດ
print("ຜົນການວິເຄາະຈາກ AI:\n", response.text)
ພຽງແຕ່ໂຄ້ດບໍ່ພໍເທົ່າໃດແຖວ, ວຽກທີ່ເຄີຍຕ້ອງໃຊ້ທີມງານ Computer Vision ມາ Train ໂມເດລເປັນເດືອນໆ ກໍສາມາດເຮັດວຽກໄດ້ແລ້ວ!
ກໍລະນີສຶກສາທີ 2: ການສະກັດເຟຣມວິດີໂອ (Video Frame Extraction ສຳລັບການຈະລາຈອນ)
ສຳລັບການວິເຄາະວິດີໂອ, ເຖິງແມ່ນວ່າ Gemini API ຈະຮອງຮັບການ Upload Video File ໂດຍກົງ, ແຕ່ວິທີການນັ້ນມັກຈະມີຂໍ້ຈຳກັດເລື່ອງຂະໜາດໄຟລ໌ ແລະ ເວລາໃນການ Upload ທີ່ດົນ (Bandwidth ຢູ່ລາວອາດຈະບໍ່ສະດວກໃນບາງພື້ນທີ່).
ເຄັດລັບສຳລັບນັກພັດທະນາ (Pro Tip): ວິທີທີ່ມີປະສິດທິພາບກວ່າຄືການໃຊ້ OpenCV ສະກັດເອົາບາງເຟຣມ (Frames) ອອກມາເຊັ່ນ: ດຶງ 1 ຮູບ ທຸກໆ 2 ວິນາທີ. ຈາກນັ້ນຈຶ່ງສົ່ງຊຸດຮູບພາບເຫຼົ່ານັ້ນໄປໃຫ້ Gemini ວິເຄາະ. ວິທີນີ້ຊ່ວຍປະຢັດທັງເວລາ ແລະ API Quota.
ລອງມາເບິ່ງວິທີການເບິ່ງວິດີໂອການຈະລາຈອນຢູ່ຖະໜົນລ້ານຊ້າງ ນະຄອນຫຼວງວຽງຈັນ ນຳກັນ:
import cv2
import google.generativeai as genai
from PIL import Image
genai.configure(api_key="ປ່ຽນເປັນ_API_KEY_ຂອງທ່ານ")
model = genai.GenerativeModel('gemini-1.5-pro') # ໃຊ້ pro ສຳລັບການວິເຄາະບໍລິບົດຫຼາຍຮູບພ້ອມກັນ
def extract_frames_from_video(video_path, frame_interval_seconds=2):
"""
ຟັງຊັນສຳລັບດຶງຮູບພາບຈາກວິດີໂອ ຕາມໄລຍະເວລາທີ່ກຳນົດ
"""
vidcap = cv2.VideoCapture(video_path)
fps = int(vidcap.get(cv2.CAP_PROP_FPS)) # ຫາຈຳນວນເຟຣມຕໍ່ວິນາທີຂອງວິດີໂອ
frames = []
count = 0
success, image = vidcap.read()
while success:
# ດຶງເຟຣມຕາມຊ່ວງເວລາທີ່ກຳນົດ ເຊັ່ນ: ທຸກໆ 2 ວິນາທີ
if count % (fps * frame_interval_seconds) == 0:
# OpenCV ອ່ານພາບເປັນ BGR, ຕ້ອງປ່ຽນເປັນ RGB ກ່ອນເພື່ອໃຊ້ກັບ Pillow
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
pil_image = Image.fromarray(rgb_image)
frames.append(pil_image)
success, image = vidcap.read()
count += 1
vidcap.release()
return frames
# ດຶງຂໍ້ມູນຈາກໄຟລ໌ວິດີໂອຈະລາຈອນ
video_frames = extract_frames_from_video("vientiane_traffic.mp4")
print(f"ສະກັດຮູບພາບສຳເລັດຈຳນວນ: {len(video_frames)} ເຟຣມ")
# ກຽມຂໍ້ມູນເພື່ອສົ່ງໃຫ້ API
prompt = """
ນີ້ຄືລຳດັບພາບຈາກວິດີໂອກ້ອງວົງຈອນປິດ ຖະໜົນລ້ານຊ້າງ ໃນນະຄອນຫຼວງວຽງຈັນ.
ກະລຸນາປະເມີນສະພາບການຈະລາຈອນວ່າ:
1. ລົດຕິດຂັດໜັກປານໃດ?
2. ມີຍານພາຫະນະປະເພດໃດແດ່ທີ່ເຫັນໄດ້ຊັດເຈນທີ່ສຸດ (ເຊັ່ນ: ລົດຈັກ, ລົດໃຫຍ່, ລົດຕຸກໆ)?
3. ມີເຫດການຜິດປົກກະຕິຫຍັງເກີດຂຶ້ນ ຫຼື ບໍ່?
"""
# ແນບ Prompt ບວກກັບ List ຂອງຮູບພາບເຟຣມຕ່າງໆ
request_payload = [prompt] + video_frames
try:
response = model.generate_content(request_payload)
print("\nຜົນການວິເຄາະວິດີໂອ:\n", response.text)
except Exception as e:
print("ເກີດຂໍ້ຜິດພາດໃນການປະມວນຜົນ:", e)
ໃນຕົວຢ່າງເທິງນີ້, AI ຈະສາມາດເຂົ້າໃຈເຖິງ “ການປ່ຽນແປງ” ທີ່ເກີດຂຶ້ນໃນຫຼາຍໆຮູບທີ່ລຽນລຳດັບກັນ ເຂົ້າໃຈເຖິງການເຄື່ອນໄຫວ ແລະ ປະເມີນສະຖານະການໄດ້ຢ່າງແມ່ນຍຳ ໂດຍບໍ່ຈຳເປັນຕ້ອງອັບໂຫຼດວິດີໂອໜັກໆເລີຍ.
ບົດສະຫຼຸບທີ່ຄວນຈື່ (Key Takeaways)
- Multi-Modal ຄືອະນາຄົດ: ການລວມເອົາ ຂໍ້ມູນຕົວໜັງສື (Text) ສາມາດສ້າງບໍລິບົດ (Context) ໃຫ້ AI ໃນການກວດສອບ ຮູບພາບ (Image) ແລະ ວິດີໂອ (Video) ໄດ້ຢ່າງສະຫຼາດຫຼາຍຂຶ້ນ.
- OpenCV ແມ່ນເຄື່ອງມືຄູ່ໃຈ: ສຳລັບການປະມວນຜົນວິດີໂອໃນຝັ່ງນັກພັດທະນາການດຶງສະເພາະເຟຣມທີ່ສຳຄັນອອກມາ ຊ່ວຍໃຫ້ຈັດການຊັບພະຍາກອນເຄືອຂ່າຍໄດ້ດີຂຶ້ນ ແລະ ຫຼຸດຄ່າໃຊ້ຈ່າຍ (API Costs).
- ການນຳໃຊ້ໃນທ້ອງຖິ່ນ (Local Impact): ເຕັກນິກເຫຼົ່ານີ້ສາມາດນຳໄປດັດແປງໃຊ້ກັບທຸລະກິດ SME ຫຼື ການແກ້ໄຂບັນຫາໃນລາວໄດ້ເລີຍ ບໍ່ວ່າຈະເປັນເຊັນເຊີກວດຈັບລະດັບນ້ຳຂອງໃນລະດູຝົນ, ກວດສອບສິນຄ້າໃນໂຮງງານ ຫຼື ການນຳໃຊ້ໃນພາກກະສິກຳດັ່ງຕົວຢ່າງຂອງພວກເຮົາ.
ການພັດທະນາ AI ສຳລັບນັກພັດທະນາໃນລາວບໍ່ເຄີຍງ່າຍ ແລະ ເຂົ້າເຖິງໄດ້ຫຼາຍເທົ່ານີ້ມາກ່ອນ. ຢ່າລືມເອົາເຕັກນິກທັງສອງຢ່າງນີ້ໄປທົດລອງປັບໃຊ້ກັບໂປຣເຈັກຂອງທ່ານເບິ່ງ, ແລ້ວທ່ານຈະພົບວ່າ AI Multi-Modal ສາມາດສ້າງມູນຄ່າເພີ່ມໃຫ້ລະບົບຂອງທ່ານໄດ້ຢ່າງມະຫາສານ. ຂໍໃຫ້ມ່ວນຊື່ນກັບການຂຽນໂຄ້ດ!