วันพฤหัสบดีที่ 23 มีนาคม พ.ศ. 2560

ตรวจจับการเคลื่อนไหวและส่งภาพขึ้น Facebook ด้วย Raspberry Pi


ตรวจจับการเคลื่อนไหวและส่งภาพขึ้น Facebook ด้วย Raspberry Pi

หลังจากที่เราได้ทำการติดตั้งโปรแกรม Motion เพื่อใช้สตรีมมิ่งวิดีโอจากเว็บแคมไปเมื่อคราวที่แล้ว วันนี้เรามาต่อยอดด้วยการใช้โปรแกรม Motion ในการตรวจจับการเคลื่อนไหว และส่งข้อมูลภาพที่ได้ไปโพสในหน้า Facebook ของเรา หลักการทำงานก็ง่ายๆครับ เราจะสั่งให้โปรแกรม Motion ทำการตรวจจับการเคลื่อนไหวในภาพ ถ้าหากว่าภาพมีการเปลี่ยนแปลงก็จะให้ทำการอัพโหลดภาพนั้นขึ้นไปที่เฟสบุคของ เราโดยใช้ Facebook API ในบทความนี้จะแนะนำการใช้ Facebook API อย่างคร่าวๆ ดังนั้นท่านควรมีพื้นฐานการใช้งาน Facebook API มาบ้างพอสมควร และเมื่ออ่านจบแล้วเรายังสามารถประยุกต์ใช้ให้ Raspberry Pi ทำการตรวจจับการเคลื่อนไหวและส่งสัญญานไปทำการควบคุมอุปกรณ์ภายนอกผ่าน GPIO ก็สามารถที่จะทำได้เช่นกัน

อย่างแรกเราต้องมี Facebook App ของเราเองก่อน โดยเข้าไปสร้างได้ที่ https://developers.facebook.com/apps ตรงนี้หากว่าใครยังไม่เคยทำหรือทำยังไม่เป็นก็ลองศึกษาเองดูก่อน ผมจะไม่ลงรายละเอียดมากนัก
เมื่อสร้างเสร็จแล้วให้เข้าไปที่ Graph API Explorer เพื่อทำการเก็บค่า Access Token (เราต้องใช้ค่านี้ไม่งั้นจะส่งข้อมูลไปเฟสบุคไม่ได้นะครับ) https://developers.facebook.com/tools/explorer/
ในหน้า Graph API Explorer ให้เลือก Application ไปที่ Facebook App ที่เราสร้าง ในตัวอย่างของผมจะเป็น Raspberry Pi Post จากนั้นกด Get Access Token ในแท็บ Extended Permissions ให้ติ๊กถูกที่ photo_upload และ publish_stream เลือกตัวอื่นด้วยก็ได้ครับแต่เราใช้แค่นี้ กด Get Access Token อีกครั้งครับ เมื่อกดแล้วในช่อง Access Token จะมีตัวอักษรยาวๆขึ้นมา ให้เรา copy ข้อมูลตรงนี้เก็บไว้ก่อนครับ

เพิ่มเติมเรื่อง Access Token อีกนิดหนึ่งครับ ค่า Access Token ที่เราได้จากขั้นตอนนี้ จะมีอายุการใช้งาน 2 ชั่วโมง ซึ่งหมายความว่าถ้าหากว่าเกิน 2 ชั่วโมงไปแล้ว เราจะต้องกลับมาเอา Access Token ตัวใหม่ไปใช้ ในการใช้งานจริงเราจะไม่ใช้ตัวนี้ แต่เราจะใช้ Access Token อีกแบบคือ Long-Lived Tokens https://developers.facebook.com/docs/facebook-login/access-tokens/#long-via-code ซึ่งจะมีขั้นตอนที่ซับซ้อนกว่านี้อีกนิดหน่อยซึ่งผมจะไม่กล่าวถึง ในการทดลองนี้ก็ใช้แบบ 2 ชั่วโมงไปพลางก่อน ^^
กลับมาที่ Raspberry Pi ให้ทำการติดตั้ง php5-curl
1
sudo apt-get install php5-curl
สร้างโฟลเดอร์สำหรับเก็บโปรแกรมและรูปจากเว็บแคม ในตัวอย่างจะเอาไปไว้ที่ /var/www/
1
2
3
sudo mkdir /var/www/motion-to-facebook/
sudo mkdir /var/www/motion-to-facebook/image/
sudo chmod 777 /var/www/motion-to-facebook/image/
ต่อไปทำการแก้ไขไฟล์คอนฟิกของ Motion ที่ /etc/motion/motion.conf
1
sudo nano /etc/motion/motion.conf
โดยเราต้องเพิ่มคำสั่งลงไป 2 ค่าคือ on_picture_save เป็นคำสั่งให้บันทึกภาพลงในโฟลเดอร์ที่เราต้องการ และ on_motion_detected เป็นคำสั่งให้เรียกโปรแกรมที่เราเขียนไว้ขึ้นมาทำงานหากว่าภาพเกิดการ เคลื่อนไหว
1
2
on_picture_save chmod 777 %f | cp %f /var/www/motion-to-facebook/image/ 
on_motion_detected /usr/bin/php /var/www/motion-to-facebook/motion-post-to-facebook-curl.php

ขั้นตอนสุดท้าย เขียนโปรแกรมที่เราจะใช้ในการอัพโหลดรูปขึ้น Facebook โดยผมจะเขียนด้วย PHP และติดต่อกับ Facebook API ผ่าน CURL หรือหากว่าใครใช้ Facebook SDK for PHP เป็นอยู่แล้วก็ตามสะดวกเลยครับ
1
sudo nano /var/www/motion-to-facebook/motion-post-to-facebook-curl.php
พิมพ์โค้ด PHP ลงไปตามตัวอย่าง และให้แทนที่ $strAccessToken เป็นค่า Access Token ที่เราได้จากขั้นตอนแรก
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
 
// Facebook Access Token String
$strAccessToken = "CAACV3IrITDcBAC2soZCQiUTkTHieCxd4FbpKmv1Re6cOdQZAFLx6kZABzUDLdr8gI3RmqoGdcqkZCZBCNZB3wjhoZA7xGq4knQTVRwo0EttxZAsM5eaTMNZCRgJ9pir3uyZBuJaZC7El8B6NniFbCuI0hwv81ruXQD6VG2ZCl9y44wF4ZCZAmWrn7X48eWCsqLPkD60o0ZD";
 
 
// Read Directory
if($handle = opendir("/var/www/motion-to-facebook/image/")){
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
 
   // Data Array
   $args = array();
   $args['message'] = "Motion Detection From Raspberry Pi";
   $args['access_token'] = $strAccessToken;
   $args['image'] = '@' . realpath("/var/www/motion-to-facebook/image/{$file}");
 
   // Post To Facebook By CURL
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL,'https://graph.facebook.com/me/photos');
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   $result = curl_exec($ch);
   curl_close ($ch);
 
   // Remove File
   unlink("/var/www/motion-to-facebook/image/{$file}");
        }
    }
    closedir($handle);
}
 
print "OK";
 
?>
จากนั้นสั่ง Restart Motion Server
1
sudo service motion restart
เสร็จเรียบร้อยแล้วครับ ทดสอบเดินผ่านหน้ากล้องดู ภาพเราก็จะถูกอัพโหลดขึ้นไปหน้าเฟสบุคอย่างที่ตั้งใจไว้แล้ว หวังว่าจะมีใครเอาไปต่อยอดทำอ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น