การเขียนโปรแกรมควบคุมอุปกรณ์ ตรวจสอบและจดจำลายนิ้วมือ (Finger Scan FPO-001V2) ด้วยภาษา Python


บทความนี้จะนำเสนอวิธีการใช้งาน Finger scanผ่านทางภาษา Python
เพื่อให้สามารถจดจำ และระบุลายนิ้วมือ เพื่อนำไปประมวลผลเป็นขั้นต่อไป

อุปกรณ์ที่ต้องใช้

  1. Raspberry Pi
  2. Finger scan รุ่น FPO-001 V2
  3. USB to Serial  2.1C หรือ อุปกรณ์อื่นในการแปลงสัญญาณ rs232 (serial) ให้เป็น USB *

* หรือจะเลือกต่อ Finger scan เข้ากับขา RS232 ใน GPIO ของ Raspberry Pi ก็ได้ วิธีนี้จะไม่ต้องใช้อุปกรณ์ USB to Serial

1377085595ภาพ Fingerprint FPO-001 V2 จาก Thaieasyelec

คุณสมบัติของ FPO-001 V2

  1. สามารถจดจำลายนิ้วมือได้ สูงสูด 3000 ชุด (Template)
  2. สามารถตรวจสอบลายนิ้วมือได้ เมื่อทำการจดจำลายนิ้วมือนั้นลงไปแล้ว

ติดตั้งโปรแกรมที่จำเป็น

  • ทำการโหลด Python API จากที่อยู่ต่อไปนี้ http://svn.learninginventions.org/svnpub/pikb/finger%20scan/trunk/fingerscan.py
    * โปรแกรมที่เขียนขึ้นนี้เปิดเผยรหัสให้ใช้ได้ฟรีตามเงื่อนไขที่กำหนดไว้ในสัญญาอนุญาติ GPL v.3 ขอความกรุณาอ้างอิงแหล่งที่มาเมื่อท่านนำไปใช้งาน (ห้องปฏิบัติการนวัตกรรมเทคโนโลยีการเรียนรู้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเชียงใหม่)
  • ขอให้แน่ใจว่าไฟล์ดังกล่าวอยู่ใน folder เดียวกับโปรแกรม Python ที่เขียน
    (หรือจะนำไปไว้ใน folder  site-package ของ Python ก็ได้)

การนำไปใช้

U2S

  1. เชื่อมต่อ Finger Scan FPO-001V2 กับ USB to Serial ซึ่งเป็น Connector แบบ Water 7 ขา
  2. เชื่อมต่อ USB to Serial กับ Raspberry Pi ผ่านทาง USB Port

 

โปรแกรมตรวจสอบลายนิ้วมือมีฟังก์ชันที่เรียกใช้งานได้ 5 ฟังก์ชันคือ

  • fp.enrollOneTime() – ฟังก์ชันนี้เป็นการจดจำลายนิ้วมือแบบครั้งเดียว
    โดย Template จะรันไปตามลำดับ 1 2 3 … 100 … จนถึง 3000 Template
    เมื่อเรียกใช้ฟังก์ชัน fp.enrollOneTime() LEDของFinger scan จะทำงาน เพื่อรอลายนิ้วมือ
    และเมื่อนำนิ้วมือทาบลงบน finger scan ตัว finger scan จะทำการจดจำลายนิ้วมือทันที
    ตัวอย่าง – fp.enrollOneTime() จะเป็นการจดจำลายนิ้วมือลงบน Template ที่ 1(ในกรณีที่ยังไม่มีการจดจำลายนี้วมือเลย)
    *ข้อควรระวัง  เมื่อมีการจดจำลายนิ้วมือใน Template ที่เคยบันทึกไว้แล้ว(ซ้ำ)
    ลายนิ้วมือเก่าจะถูกลบไป เพื่อให้สามารถบันทึกลายนิ้วมือใหม่ได้
    **เมื่อมีลายนิ้วมือนั้นๆ ใน Template แล้ว จะไม่สามารถบันทึกลายนิ้วมือเดิม
    ลงไปใน Tmeplate ใหม่ได้
  • fp.identify() – ฟังก์ชันนี้เป็นตรวจสอบลายนิ้วมือว่าลายนิ้วมือนั้นๆ ตรงกับ Template ไหน
    เมื่อเรียกใช้ฟังก์ชัน fp.identify() การทำงานจะคล้ายกับฟังก์ชั่น fp.enrollOneTime ซึ่ง
    LED ของ Fingerprint จะทำงาน เพื่อรอลายนิ้วมือ  และเมื่อนำนิ้วมือทาบลงบน Fingerprint ตัว Fingerprint จะทำการตรวจสอบลายนิ้วมือ ว่าตรงกับ template ไหนตัวอย่าง –  fp.enrollOneTime(1) ใช้ฟังก์ชั่นจดจำลายนิ้วมือ(นิ้วชี้) ที่ Template 1
    จากนั้นเรียกใช้ fp.identify() ถ้าเป็นนิ้วชี้นิ้วเดิมที่ใช้จดจำไป ตัว Fingerprint จะระบุได้ว่า
    ตรงกับ Template ที่ 1 ซึ่งถูกต้อง
    *ไม่สามารถใช้งานฟังก์ชัน fp.identify() ได้ ถ้ายังไม่มีการบันทึกลายนิ้วมือก่อนหน้า
    *ฟังก์ชัน fp.identify() สามารถตรวจสอบลายนิ้วมือได้เพียง 1 ครั้ง
  • fp.clearAll() – ฟังก์ชันนี้เป็นการ ลบข้อมูลลายนิ้วมือ ที่เคยบันทึกไว้ออกทั้งหมด
  • fp.enroll(N.) –  ฟังก์ชันนี้เป็นการจดจำลายนิ้วมือแบบ 3 ครั้ง โดยจะต้องระบุ Template
    ที่จะบันทึกด้วย โดย Fingerprint จะทำการจดจำลายนิ้วมือ 3 ครั้งจึงจะสำเร็จ
    เพื่อความถูกต้อง และแม่นยำ ในการตรวจสอบลายนิ้วมือ
  • fp.identifyFree() –  ฟังก์ชันนี้เป็นการตรวจสอบลายนิ้วมือแบบหลายครั้ง ทำงานคล้ายกับ
    ฟังก์ชัน fp.identify() แต่สามารถตรวจสอบได้หลายๆ ครั้ง จนกว่าจะยกเลิกคำสั่ง หรือ
    หมดเวลาของคำสั่ง*ฟังก์ชันนี้จะหมดเวลา คือ ออกจากการตรวจสอบลายนิ้วมือแบบหลายครั้ง
    ถ้า Fingerprint ตรวจไม่พบลายนิ้วมือ ภายใน 15 วินาที
    **ฟังก์ชัน อื่นๆ ที่หมดเวลาภายใน 15 วินาที เมื่อไม่เจอลายนิ้วมือ คือ fp.enrollOntTime(N), fp.enroll(N.), fp.identify() และ fp.identifyFree()

 

ทดลองเชื่อมต่อ

import fingerscan
import time
 
fp = fingerscan.fingerPrint()
fp.connect("/dev/ttyACM0")
 
fp.ping()
time.sleep(0.5)
 
print "Turning LED ON"
fp.ledControl(True)
time.sleep(1)
print "Turning LED OFF"
fp.ledControl(False)

โปรแกรมนี้เริ่มต้นด้วยการ import ตัว fingerscan เข้ามาใช้ แล้วทำการเชื่อมต่อจะทำให้เครื่อง Finger scan มีไฟ LED สีฟ้าติด อยู่  วินาที แล้ว ดับแปลว่าอุปกรณ์ทุกอย่างใช้งานได้สมบูรณ์

 

การจดจำลายนิ้วมือ (enroll)

    #import fingerscan

    fp = fingerPrint()
    fp.connect("/dev/ttyACM0")

    fp.enrollOneTime()
    time.sleep(0.5)

คำสั่ง fp.enrollOneTime() จะทำการจดจำ ลายนิ้วมือโดยที่ LED ของ finger scan จะเป็นสีน้ำเงิน เพื่อรอลายนิ้วมือ และเมื่อทำการจดจำลายนิ้วมือเสร็จแล้ว LED ก็จะดับไป
โดยที่ Template จะนับไปเรื่อยๆ ตามจำนวนลายนิ้วมือ 1 2 3 … 100

 

การตรวจสอบลายนิ้วมือ(identify)

    #import fingerscan

    fp = fingerPrint()
    fp.connect("/dev/ttyACM0")

    if fp.identify() == 1:
        print "Success"

คำสั่ง fp.identify() จะทำการตรวจสอบลายนิ้วมือ ว่าตรงกับ Template ที่ 1 หรือไม่
ถ้าตรงกับ Template ที่ 1 จะทำการปริ้นคำว่า Success ออกมา

   #import fingerscan

   fp = fingerPrint()
   fp.connect("/dev/ttyACM0")

   a = fp.identify()

    if a == 1:
        print "Template 1"
    elif a== 2:
        print "Template 2"
    elif a== 3:
        print "Template 3"
    elif a== 4:
        print "Template 4"
    elif a== 5:
        print "Template 5"
    else:
        print "not math Template"

โปรแกรมนี้ จะเรียกใช้คำสั่ง  fp.identify() ซึ่งถ้าตรวจสอบสำเร็จ คำสั่งนี้จะส่งตัวเลข Template ที่เก็บข้อมูลลายนิ้วมือที่ตรวจสอบออกมา ว่าตรงกับ Template ไหน

สมมุติว่า ให้มีการจดจำลายนิ้วมือ จำนวน 5 ลายนิ้วมือ แล้วทำการสั่ง fp.identify() เพื่อตรวจสอบ
แล้วจึงนำค่าที่ได้จากคำสั่ง fp.identify() ไปเก็บไว้ใน a จากนั้น นำ a มาเช็คว่าตรงกับเลขอะไร
(ตรงกับลายนิ้วมือ Template ไหน) เมื่อตรงกับ ลายนิ้วมือที่ต้องการแล้ว จึงให้ปริ้นค่า หรือทำอย่างอื่นได้ตามต้องการ

สรุป

บทความนี้ได้แสดงถึงคำสั่งการใช้งาน Fingerprint FPO-001 v2 เพื่อจดจำลายนิ้วมือ
และตรวจสอบลายนิ้วมือ ซึ่งจะสามารถตรวจสอบได้เมื่อมีการจดจำลายนิ้วมือนั้น อยู่แล้ว

อ้างอิง

บทความนี้เป็นการประยุกต์ตัวอย่างที่เขียนโดย Thaieasyelec

#Attapan