ตรวจจับการเคลื่อนไหวและส่งภาพขึ้น 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
|
เสร็จเรียบร้อยแล้วครับ ทดสอบเดินผ่านหน้ากล้องดู
ภาพเราก็จะถูกอัพโหลดขึ้นไปหน้าเฟสบุคอย่างที่ตั้งใจไว้แล้ว
หวังว่าจะมีใครเอาไปต่อยอดทำอ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น