Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ການປົດລັອກຄວາມສາມາດ Multi-Modal ໃນ Gemini API: ການວິເຄາະຮູບພາບ ແລະ ວິດີໂອ

ໂພສເມື່ອ # Gemini API # Multi-Modal # Computer Vision # Python

ການປົດລັອກຄວາມສາມາດ Multi-Modal ໃນ Gemini API: ການວິເຄາະຮູບພາບ ແລະ ວິດີໂອ

ລອງນຶກພາບເບິ່ງວ່າ: ຖ້າທ່ານກຳລັງສ້າງແອັບພລິເຄຊັນຊ່ວຍເຫຼືອຊາວກະສິກອນຢູ່ເມືອງປາກຊ່ອງ ທີ່ສາມາດຖ່າຍຮູບໃບກາເຟແລ້ວໃຫ້ AI ບອກໄດ້ທັນທີວ່າເປັນພະຍາດຫຍັງ, ຫຼື ສ້າງລະບົບວິເຄາະວິດີໂອກ້ອງວົງຈອນປິດ (CCTV) ຢູ່ສີ່ແຍກໄຟແດງນະຄອນຫຼວງວຽງຈັນ ເພື່ອສັງເກດການຈະລາຈອນວ່າລົດຕິດຂັດຊ່ຳໃດ ໂດຍທີ່ບໍ່ຕ້ອງຂຽນໂມເດລ Machine Learning ເອງຕັ້ງແຕ່ຕົ້ນ. ສິ່ງເຫຼົ່ານີ້ເປັນໄປໄດ້ແລ້ວໃນປັດຈຸບັນດ້ວຍ ໂມເດລ Multi-Modal.

ມື້ນີ້ເຮົາຈະມາລົງເລິກວິທີການນຳໃຊ້ Google Gemini API ເຊິ່ງມີຄວາມສາມາດດ້ານ “Multi-Modal” (ຮອງຮັບທັງການຮັບຂໍ້ມູນທີ່ເປັນ ຂໍ້ຄວາມ, ຮູບພາບ ແລະ ວິດີໂອ ໃນເວລາດຽວກັນ). ສຳລັບນັກພັດທະນາ (Developers) ລະດັບກາງ ທີ່ຄຸ້ນເຄີຍກັບ Python ແລ້ວ ບົດຄວາມນີ້ຈະພາທ່ານຂຽນໂຄ້ດສົ່ງຮູບພາບ ແລະ ດຶງເຟຣມ (Frames) ຈາກວິດີໂອສົ່ງໃຫ້ API ປະມວນຜົນແບບ Step-by-Step.

ສິ່ງທີ່ຕ້ອງກຽມກ່ອນເລີ່ມຕົ້ນ (Prerequisites)

ກ່ອນອື່ນໝົດ, ໃຫ້ແນ່ໃຈວ່າທ່ານມີ:

  1. ກະແຈ Gemini API Key (ສາມາດເຂົ້າໄປສ້າງໄດ້ຟຣີທີ່ Google AI Studio).
  2. ຕິດຕັ້ງ Python 3.9 ຂຶ້ນໄປ.
  3. ຕິດຕັ້ງ 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)

ການພັດທະນາ AI ສຳລັບນັກພັດທະນາໃນລາວບໍ່ເຄີຍງ່າຍ ແລະ ເຂົ້າເຖິງໄດ້ຫຼາຍເທົ່ານີ້ມາກ່ອນ. ຢ່າລືມເອົາເຕັກນິກທັງສອງຢ່າງນີ້ໄປທົດລອງປັບໃຊ້ກັບໂປຣເຈັກຂອງທ່ານເບິ່ງ, ແລ້ວທ່ານຈະພົບວ່າ AI Multi-Modal ສາມາດສ້າງມູນຄ່າເພີ່ມໃຫ້ລະບົບຂອງທ່ານໄດ້ຢ່າງມະຫາສານ. ຂໍໃຫ້ມ່ວນຊື່ນກັບການຂຽນໂຄ້ດ!