Funtion: esp_err_t init()
ใช้กำหนด Parameter พื้นฐานที่จำเป็น และ initial Module กล้อง เช่น
- กำหนด Pin ใช้เชื่อมต่อ Camera กับ ESP32
- กำหนด Timer ,LEDC ,ความถี่ Clock ที่จ่ายให้โมดูลกล้อง
- Format ภาพที่ได้จากกล้อง (jpg ,rgb)
- ขนาดภาพ
- คุณภาพการบีบอัดภาพ(กรณีที่ใช้ jpg)
init เป็นเพียงการกำหนดค่าเริ่มต้นที่จำเป็นเท่านั้นในส่วนรายละเอียด การตั้งค่าอื่นๆ สามารถ กำหนดจาก function sensor ได้ภายหลัง
Rertun หาก initial โมดูลสำเร็จจะ return ESP_OK
Funtion: sensor_t * sensor()
คือ Function ที่ return pointer ของ structure sensor_t ซึ่งเป็น structure ที่ใช้ตั้งค่า option ต่างๆ ให้กับกล้อง OV2640 ซึ่งมีรายละเอียดดังนี้
set_pixformat (sensor_t *sensor, pixformat_t pixformat)
pixformat ใช้กำหนดรูปแบบข้อมูลของไฟล์ภาพ ได้แก่
- RGB565 (2 bytes per pixel)
- YUV422 (2 bytes per pixel)
- Grayscale ภาพไล่สเกลขาว-ดำ (1 bytes per pixel)
- JPEG แบบ Compressed
- RGB888 (3 bytes per pixel)
set_framesize (sensor_t *sensor, framesize_t framesize)
framesize ใช้กำหนดขนาดความกว้าง x ยาวของรูปภาพที่ต้องการ
- FRAMESIZE_QQVGA resulution 160 x 120 pixels
- FRAMESIZE_QQVGA2 resulution 128 x 160 pixels
- FRAMESIZE_QCIF resulution 176 x 144 pixels
- FRAMESIZE_HQVGA resulution 240 x 176 pixels
- FRAMESIZE_QVGA resulution 320 x 240 pixels
- FRAMESIZE_CIF resulution 400 x 296 pixels
- FRAMESIZE_VGA resulution 640 x 480 pixels
- FRAMESIZE_SVGA resulution 800 x 600 pixels
- FRAMESIZE_XGA resulution 1024 x 768 pixels
- FRAMESIZE_SXGA resulution 1280 x 1024 pixels
- FRAMESIZE_UXGA resulution 1600 x 1200 pixels
set_quality (sensor_t *sensor, int quality)
quality ใช้สำหรับปรับค่าคุณภาพของภาพ สามารถกำหนดได้ตั้งแต่ 10-63 โดย 10 คือคุณภาพดีที่สุด
set_contrast (sensor_t *sensor, int level)
level ใช้สำหรับปรับค่า ความต่างสีของภาพ ซึ่งสามารถกำหนดได้ ตั้งแต่ -2,ถึง 2
set_contrast (sensor_t *sensor, int level)
level ใช้สำหรับปรับค่า ความต่างสีของภาพ ซึ่งสามารถกำหนดได้ ตั้งแต่ -2,ถึง 2
set_brightness (sensor_t *sensor, int level)
level ใช้สำหรับปรับค่าความสว่างของภาพซึ่งสามารถกำหนดได้ ตั้งแต่ -2,ถึง 2
set_saturation (sensor_t *sensor, int level)
level ใช้สำหรับปรับค่าความเข้มสีหรือความสดของภาพซึ่งสามารถกำหนดได้ ตั้งแต่ -2,ถึง 2
set_gainceiling (sensor_t *sensor, gainceiling_t gainceiling)
gainceiling ใช้ปรับกำหนดเพดานของค่าเกนที่ยอมให้กล้องใช้ขยาย output จากเซ็นเซอร์ของกล้องเพื่อให้ได้ภาพที่สว่างขึ้นเมื่ออยู่ในสภาวะแสดงน้อย (low light cond.) ปรับค่าโดยกำหนดข้อความเหล่านี้ลงใน gainceiling
- GAINCEILING_2X
- GAINCEILING_4X
- GAINCEILING_8X
- GAINCEILING_16X
- GAINCEILING_32X
- GAINCEILING_64X
- GAINCEILING_128X
ค่าเกนที่สูงขึ้นช่วยขยายเอาต์พุตแต่จะส่งผลให้สัญญาณรบกวนถูกขยายด้วย
set_whitebal (sensor_t *sensor, int enable)
enable ใช้เปิดปิดการปรับค่า white balance โดย 0 = ปิด และ 1 = เปิด
set_gain_ctrl (sensor_t *sensor, int enable)
enable ใช้เปิดปิดการปรับค่า gaincontrol โดย 0 = ปิด และ 1 = เปิด
set_exposure_ctrl (sensor_t *sensor, int enable)
enable ใช้เปิดปิดการปรับค่า exposure โดย 0 = ปิด และ 1 = เปิด
set_hmirror (sensor_t *sensor, int enable)
enable ใช้ปรับภาพให้กลับ ซ้าย-ขวา ในแนวนอน เหมือนเป็นกระจกเงา Horizontal Mirror หรือ Horizontal Flipโดย 0 = ปิด และ 1 = เปิด
set_vflip (sensor_t *sensor, int enable)
enable ใช้ปรับภาพให้กลับ บน-ล่าง ในแนวตั้ง Vertical Flipโดย 0 = ปิด และ 1 = เปิด
set_aec2 (sensor_t *sensor, int enable)
enable กำหนดให้ใช้ Auto Exposure Control ที่ตัว DSP ส่งผลให้ภาพสว่างขึ้นเล็กน้อย โดย 0 = ปิด และ 1 = เปิด
set_awb_gain (sensor_t *sensor, int enable)
enable ถ้ากำหนดเป็น 1 คือ กำหนดให้เซนเซอร์ทำงานแบบ Auto White Balance
ถ้ากำหนดเป็น 0 คือ กำหนดค่าเอง โดยใช้ร่วมกับค่า wb_mode เพื่อเลือกสมดุลแสงขาวที่ต้องการ
set_agc_gain (sensor_t *sensor, int gain)
gain กำหนดเกนขยายภาพเอาต์พุตเอง ได้ตั้งแต่ 1 ถึง 30
set_aec_value (sensor_t *sensor, int gain)
gain กำหนดค่า Auto Exposure Control เอง ได้ตั้งแต่ค่า 0 ถึง 1200 (ค่า 1200 จะสว่างที่สุด)
set_special_effect (sensor_t *sensor, int effect)
effect ใช้กำหนดเอฟเฟคพิเศษในภาพกำหนดค่าได้ตั้งแต่ 0 ถึง 6
- 0 = Normal ภาพปกติ
- 1 = Negative ภาพแบบฟิล์มเนกาทีฟ
- 2 = B&W ภาพไล่โทนสีขาว-ดำ Greyscale
- 3 = Redish ภาพอมสีแดง (Red Tint)
- 4 = Greenish ภาพอมสีเขียว (Green Tint)
- 5 = Bluish ภาพอมสีน้ำเงิน (Blue Tint)
- 6 = Antique ภาพโบราณแนวสี Sepia
set_wb_mode (sensor_t *sensor, int mode)
mode ใช้กำหนดค่าสมดุลแสงขาว (White Balance) เอง ตั้งแต่ 0 ถึง 4
- 0 = Auto อัตโนมัติ
- 1 = Sunny แสงกลางแจ้งมีแดดจัด อุณหภูมิสี 5000K – 6500K
- 2 = Cloudy แสงกลางแจ้งมีเมฆมาก อุณหภูมิสี 6500K – 8000K
- 3 = Office แสงไฟ Fluorescent อุณหภูมิสี 4000K – 5000K
- 4 = Home แสงไฟ Tungsten อุณหภูมิสี 2500K – 3500K
set_ae_level (sensor_t *sensor, int level)
level ใช้กำหนดการชดเชยค่า Exposure ตั้งแต่ -2 ถึง 2
set_raw_gma (sensor_t *sensor, int enable)
enable เลือกใช้ค่าแกมมาที่เซนเซอร์รับได้ (raw gamma) หรือ ปรับค่าแกมมาในภาพเพื่อให้เหมาะสมกับการนำไปแสดงผล เมื่อกำหนดเป็น1ภาพที่นำไปแสดงผลจะสว่างขึ้น
set_lenc (sensor_t *sensor, int enable)
enable ปรับแก้ความผิดพลาดที่เกิดจากเลนส์ (lens correction) ให้โดยอัตโนมัติ ชดเชยแสงที่ดรอปจากคุณภาพของเลนส์หรือปรับขอบภาพที่มืดจากเลนส์ให้สว่างเท่ากันทั้งภาพ เมื่อกำหนดเป็น 1 ภาพที่ได้จะถูกปรับแก้ให้ความสว่างเหมาะสมทั้งภาพ
Function: camera_fb_t *capture()
คือ Function สำหรับถ่ายภาพ โดยจะ Return ค่าออกมาเป็น pointer ของ Structure camera_fb_t
ซึ่งภายใน Structure camera_fb_t ประกอบด้วย
typedef struct { uint8_t * buf; /*!< Pointer to the pixel data */ size_t len; /*!< Length of the buffer in bytes */ size_t width; /*!< Width of the buffer in pixels */ size_t height; /*!< Height of the buffer in pixels */ pixformat_t format; /*!< Format of the pixel data */ } camera_fb_t;
Funtion: clearMemory(memory)
คือ Function สำหรับคืนหน่วยความจำที่จองเอาไว้กลับคืนส่วนกลางเพื่อนำไปใช้งานอย่างอื่น
Structure: mtmn_config_t
คือ Structure สำหรับตั้งค่า parameter สำหรับการทำ Face Detect ซึ่งประกอบด้วย
– float min_face
ส่วนกำหนด ขนาดเล็กสุดของใบหน้าที่ตรวจสอบได้ โดยวัดจาก ค่าความยาวของด้านที่สั้นที่สุดของภาพอินพุต โดยค่าที่กำหนดได้น้อยที่สุดคือ 12
สำหรับภาพอินพุตที่จำกัดขนาดไว้แล้วแน่นอน การกำหนดค่า min_face ลดลง จะส่งผลให้
– จำนวนภาพขนาดแตกต่างกันที่ถูกสร้างขึ้น เพิ่มขึ้น
– ขนาดของใบหน้าที่เล็กที่สุดที่ตรวจจับได้ ลดลง
– เวลาในการประมวลผล นานขึ้น
– float pyramid
คือ สเกลของการไล่สเกลสำหรับภาพอินพุต กำหนดสเกลควบคุม pyramid ที่สร้างขึ้น สามารถกำหนดค่าได้ตั้งแต่ 0.0-1.0
สำหรับภาพอินพุตที่จำกัดขนาดไว้แล้วแน่นอน การกำหนดค่า pyramid มากขึ้น จะส่งผลให้
– จำนวนภาพขนาดแตกต่างกันที่ถูกสร้างขึ้น เพิ่มขึ้น
– สัดส่วนการตรวจจับ เพิ่มขึ้น
– เวลาในการประมวลผล นานขึ้น
– threshold_config_t p_threshold กำหนดค่า Threshold ของ P-Net
– threshold_config_t r_threshold กำหนดค่า Threshold ของ R-Net
– threshold_config_t o_threshold กำหนดค่า Threshold ของ O-Net
Structure: threshold_config_t
คือ Structure สำหรับกำหนดค่าให้กับ threshold ให้กับ P-Net, R-Net,O-Netประกอบด้วย
– float score
คือค่า threshold ของ confidence coefficient (สัมประสิทธิ์ความเชื่อมั่น)
ถ้า candidate bounding box มีค่าความน่าเชื่อถือน้อยกว่าค่าที่กำหนดไว้ จะถูกคัดกรองออกไป สามารถกำหนดค่าได้ตั้งแต่ 0.0 – 1.0
สำหรับภาพอินพุตที่จำกัดขนาดไว้แล้วแน่นอน การกำหนดค่า score มากขึ้น จะส่งผลให้
– Candidate bounding box จะถูกคัดกรองออกไป มากขึ้น
– สัดส่วนการตรวจจับ ลดลง
– float nms
คือค่า threshold ของ NMS ถ้า candidate bounding box มี overlapping ratio สูงกว่าค่าที่กำหนดไว้จะถูกคัดกรองออกไป สามารถกำหนดค่าได้ตั้งแต่ 0.0 – 1.0
สำหรับภาพอินพุตที่จำกัดขนาดไว้แล้วแน่นอน การกำหนดค่า nms มากขึ้น จะส่งผลให้
– ความน่าจะเป็นในการตรวจจับใบหน้าที่ทับซ้อนกัน สูงขึ้น
– ตรวจจับ candidate bounding box ของใบหน้าที่ซ้ำกันได้ มากขึ้น
– int candidate_number
คือค่า จำนวนมากที่สุดของ bounding box ที่ให้มีได้แต่จะมีเพียงหมายเลขแรกเท่านั้นที่จะถูกเก็บค่าไว้
R-Net สามารถกำหนดค่าได้ 1-4
O-Net สามารถกำหนดค่าได้ 1-2
P-Net สามารถกำหนดค่าได้ 4 เท่านั้น (ยังไม่ให้ผู้ใช้ปรับค่าได้ในตอนนี้)
สำหรับภาพอินพุตที่จำกัดขนาดไว้แล้วแน่นอน การกำหนดค่า candidate_number มากขึ้นจะส่งผลให้
– จำนวนหน้าที่ตรวจจับได้ เพิ่มขึ้น
– ใช้เวลาประมวลผล นานขึ้น
Function: bool jpg2rgb(camera_fb_t *fb, dl_matrix3du_t **image_matrix)
คือ Function สำหรับแปลงรูปถาพ JPG ที่ถ่ายได้จากกล้อง เป็น ภาพ Red 8 bits , Green 8 bits , Blue 8 bits
– fb คือ Structure ที่เก็บรูปภาพ JPG ที่ได้จากกล้อง
– image_matrix คือ pointer สำหรับรับภาพที่แปลงเป็น RGB 888 แล้ว
– return true หากแปลงภาพสำเร็จ
Function: bool rgb2jpg(dl_matrix3du_t *rgb888, uint8_t **jpg,size_t *len)
คือ Function สำหรับแปลงรูปภาพ RGB (Red 8 bits, Green 8 bits, Blue 8 bits) เป็น JPG
– rgb888 คือ Structure ที่เก็บรูปภาพ RGB888 ที่ต้องการแปลงเป็น JPG
– jpg คือ pointer สำหรับรับภาพที่แปลงเป็น JPG แล้ว
– len คือ ขนาด size ของรูปภาพ jpg (bytes)
– return true หากแปลงภาพสำเร็จ
Function: box_array_t *faceDetect(dl_matrix3du_t *image_matrix,mtmn_config_t *config)
คือ Function สำหรับตรวจหาใบหน้าในภาพ
– image_matrix คือ Structure ที่เก็บรูปภาพ RGB888
– config คือ Structure สำหรับตั้งค่า parameter สำหรับการทำ Face Detect
– return box_array_t
Structure: box_array_t
คือ Structure ผลของการตรวจจับใบหน้าซึ่งประกอบด้วย
– box_t *box; คือ ตำแหน่ง bounding box ของแต่ละใบหน้าที่ตรวจพบ
– landmark_t *landmark คือ พิกัด landmark ของแต่ละใบหน้าที่ตรวจพบ
– int len คือ จำนวนใบหน้าที่ตรวจพบ
Function: void drawFaceBoxes(dl_matrix3du_t *image_matrix, box_array_t *boxes,bool landmark)
คือ Function สำหรับเขียนกรอบสี่เหลี่ยมปิดล้อมใบหน้า
– image_matrix คือ Structure ที่เก็บรูปภาพ RGB888
– boxes คือ structure เก็บผลลัพธ์ของการค้นหาใบหน้า ที return จาก function faceDetect
– landmark คือ ตัวแปร เปิด/ปิด การแสดง Land mark 5 จุด true = แสดง
Function: void faceIDInit(face_id_list *l, uint8_t size, uint8_t confirm_times)
คือ Function สำหรับ Initialize face id list เช่น จองพื้นที่ จำนวนใบหน้า และ จำนวน ครั้ง Enroll
– l คือ structure เก็บใบหน้า
– size คือ จำนวนใบหน้าที่เก็บ
– confirm_times คือ จำนวนครั้ง Enroll
Function: int8_t alignFace(dl_matrix3du_t *image_matrix, box_array_t *net_boxes, dl_matrix3du_t **aligned_face)
คือ Function สำหรับ ตรวจสอบ และ จัดเรียงข้อมูลใบหน้า
– image_matrix คือ Structure ที่เก็บรูปภาพ RGB888
– net_boxes คือ ข้อมูลตำแหน่งใบหน้าที่ได้จาก function faceDetect
– aligned_face คือ output ของภาพที่ถูกจัดเรียงแล้ว
– return ESP_OK or ESP_FAIL
Function: int8_t enroll_face(face_id_list *l, dl_matrix3du_t *aligned_face)
คือ Function สำหรับ สร้างหมายเลข id ให้กับใบหน้า และ บันทึกลง face_id_list
– l คือ structure เก็บใบหน้า
– aligned_face ข้อมูลที่ถูก ตรวจสอบ และ จัดเรียงแล้วจาก Function alignFace
– return
-1 Wrong input enroll_confirm_times
0 Enrollment finish
>=1 The left piece of aligned faces should be input
Function: int8_t ESPino32CAM::recognizeFace(face_id_list *l,dl_matrix3du_t *aligned_face)
คือ Function สำหรับจับคู่รูปใบหน้าที่ตรวจจับได้ กับ ข้อมูลใน face_id_list
– l คือ structure เก็บใบหน้า
– aligned_face ข้อมูลที่ถูก ตรวจสอบ และ จัดเรียงแล้วจาก Function alignFace
-return หมายเลขใบหน้าที่ตรงกับใบหน้าใน face_id_list
Function: bool faceIDInitFlash()
คือ Function สำหรับ initial SPIFFS สำหรับใช้งาน เขียนอ่าน face_id_list ลง Flash Memory
– return true = initial สำเร็จ
Function: bool readFaceIDFromFlash(face_id_list *l)
คือ Function สำหรับอ่านค่า face_id_list ที่อยู่ใน Flash Memory มาเก็บในตัวแปร face_id_list ใน RAM
– l คือ Output ที่อ่าน face_id_list ใน Flash ทาเก็บไว้
– return true = ทำงานสำเร็จ
Function: bool writeFaceIDToFlash(face_id_list *l)
คือ Function สำหรับเขียนค่า face_id_list ลงใน Flash Memory
– return true = ทำงานสำเร็จ
Function: bool deleteFaceIDinFlash()
คือ Function สำหรับลบ face_id_list ใน Flash Memory
– return true = ทำงานสำเร็จ
Function: int rgbPrintf(dl_matrix3du_t *image_matrix, uint32_t color, const char *format, …)
คือ Function สำหรับเขียนข้อความลงบนภาพ RGB 888
– image_matrix คือ Structure ที่เก็บรูปภาพ RGB888
– color คือ สีของตัวอักษร
– format,… คือ ข้อความ และ ตัวแปร ที่ต้องการแสดง
– return จำนวนตัวอักษร
Function: void rgbGoto(int32_t x, int32_t y)
คือ Function สำหรับกำหนดตำแหน่งเริ่มต้น แสดงข้อความ
– x คือ พิกัดในแนวแกน x
– y คือ พิกัดในแนวแกน y
Function: void init(ESPino32CAM *cam)
คือ Function สำหรับ initial QR code
– cam คือ object ของ ESPino32CAM
Function: qrResoult recognition(dl_matrix3du_t *image888)
คือ Function สำหรับนำรูปภาพ RGB 888 ที่มีรูปภาพ QR code ไปแปลข้อมูล
– image888 คือ Structure ที่เก็บรูปภาพ RGB888
– return qrResoult
Structure: qrResult
คือ structure ที่เก็บผลลัพธ์ การอ่าน QR code ประกอบด้วย
– bool status
– uint8_t version
– char eccLevel
– uint8_t mask
– uint8_t dataType
– uint8_t length
– uint8_t eci
– String payload