ESPIno32CAM : Function and Variable

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