K210(Sipeed M1) run face tracking PT demo with maixpy

Discussion and questions about boards that can run MicroPython but don't have a dedicated forum.
Target audience: Everyone interested in running MicroPython on other hardware.
Post Reply
zepan
Posts: 9
Joined: Sat Nov 17, 2018 9:01 am

K210(Sipeed M1) run face tracking PT demo with maixpy

Post by zepan » Wed Dec 05, 2018 2:08 pm

0. Hi, we are sipeed team, this post introduce how to run face tracking on Sipeed MAIX-I board.
We decide to not run demo automatically, and so you can try it yourself to run the face tracking demo in few lines of coding.
It is an rushed demo, architecture is not consider well, and we are moving to freeRTOS version SDK, this demo is almost last version of standalone SDK.
We will redesign the architecture in freeRTOS version, it will be more easy to use.
If you are interested in maixpy development and experienced in micropython, you can send email to support@sipeed.com, and we will send MAIX board to you for FREE~
This firmware can be download at here: https://drive.google.com/open?id=1uhoff ... JwlGwcMTAn

1. Stick PT on desk, Connect usb to board, and Install CH340 driver(http://www.wch.cn/download/CH341SER_ZIP.html).
2. Open any terminal software like XShell, set baudrate to 115200, and open corresponding serial port, press some ‘Enter’ key, and you can see ‘>>>’ come out.
3. You need to define a PT(PAN/TILT) object. use code as follow

Code: Select all

	  import PT
	  PT_test=PT.PT()
if you want set P parametr of PID controler(P default value of x axis is -0.07,and P of y axis is -0.05) , you can use code as follow,"xx" is the value you want

Code: Select all

PT_test = PT.PT(P_x = xx,P_y = xx)
4. Now , you can run PT by using code

Code: Select all

PT_test.run()
And you can move your face , the PT will follow your face.
if yo want to stop it ,you can press ctrl+C with keyboard
after you stop the PT_test,you can use the code to modify the P value of PID controler

Code: Select all

PT_test.set_P(P_x = xx,P_y = xx)
after that ,you can restart the PT with different P value

Code: Select all

PT_test.run()
Note:
The demo design to track one face, more than one face will case shake.
Servo have limited angle, if tracking too upside, it maybe reboot.
you can watch video on: https://www.youtube.com/watch?v=7bpNVzFbGa0
we will upload this face tracking PT to indiegogo perk soon: https://www.indiegogo.com/projects/sipe ... 19744832#/

The PT.py code(you can use " app.vi('/PT.py')" to edit it on board, or use machine.rz() to rcv file from PC):

Code: Select all

import machine
from fpioa_manager import *
global fm
class PT:
	def __init__(self,P_x = -0.07,P_y = -0.05,x_init_ang = 90,y_init_ang = 9
		global fm
		if x_init_ang > 160 or x_init_ang<30:
			print("x_init_ang value error")
			return None
		if y_init_ang > 160 or y_init_ang<30:
			print("y_init_ang value error")
			return None
		if P_x > 0 :
			print("x axis P_value(P_x) must <0")
			return None
		if P_y > 0 :
			print("y axis P_value(P_y) must <0")
			return None
		self.Px = P_x
		self.Py = P_y
		self.x_angle = x_init_ang
		self.y_angle = y_init_ang
		self.print_en = pr_en
		self.limite_value = limited_val				 
		self.cam=machine.ov2640();				      
		self.lcd=machine.st7789();				      
		self.demo=machine.demo_face_detect();			   
		self.demo.init();					       
		self.cam.init();						
		self.lcd.init();						
		fm.registered(34,fm.fpioa.TIMER1_TOGGLE1);		      
		fm.registered(35,fm.fpioa.TIMER1_TOGGLE2);		      
		self.y_axis=machine.pwm(machine.pwm.TIMER1,machine.pwm.CHANEEL0,
		self.x_axis=machine.pwm(machine.pwm.TIMER1,machine.pwm.CHANEEL1,
		self.x_axis.duty(7.5)					   
		self.y_axis.duty(7.5)					   
										
	def set_P(self,P_x = 0,P_y = 0):					
		if P_y >= 0 :						   
			print("y axis P_value(P_y) must <0")		    
			return False					    
		if P_x >= 0 :						   
			print("x axis P_value(P_x) must <0")		  
			return False					    
		self.Px = P_x						   
		self.Py = P_y						   
	def run(self):							  
		ex = 0.0							
		ey = 0.0							
		ux_angle = 0.0						  
		uy_angle = 0.0						  
		x = 0.0							 
		y = 0.0							 
		x1 = 0							  
		x2 = 0							  
		y1 = 0							  
		y2 = 0							  
		image = bytearray(320*240*2);				   
		while(1):						       
			self.cam.get_image(image);			      
			data = self.demo.process_image(image);		  
			self.lcd.draw_picture_default(image);		   
			x1=data[0];					     
			x2=data[1];					     
			y1=data[2];		
			y2=data[3];					     
										
			if x1 > 320 or x2 > 320 or y1 > 240 or y2 > 240 :       
				continue					
			x =(x2 - x1)/2+x1;				      
			y =(y2 - y1)/2+y1;				      
										
			ex = (160 - x);					 
			ey = (120 - y);					 
										
			ux_angle = ex  * self.Px				
			if abs(ex) < 5 : ux_angle = 0			   
			if ux_angle >= 15 : ux_angle = 15		       
			if ux_angle <= -15 : ux_angle = -15		     
										
			uy_angle = ey  * self.Py				
			if abs(ey) < 5 : ux_angle = 0			   
			if uy_angle >= self.limite_value : uy_angle = self.limit
			if uy_angle <= -self.limite_value : uy_angle = -self.lim
										
			self.x_angle = ux_angle + self.x_angle		  
			self.y_angle = uy_angle + self.y_angle       
			if self.x_angle * 0.055 >= 9.8 :			
			    self.x_angle = 180				  
			    ux_angle = 0					
			if self.x_angle * 0.055 <= 0.5 :			
			    self.x_angle = 0				    
			    ux_angle = 0					
			x_angle_duty =  (self.x_angle) * 0.055		  
			y_angle_duty =  (self.y_angle) * 0.055		  
										
			if self.print_en == 1 :				 
				print("x = ",x)				 
				print("y = ",y)				 
				print("ux_angle = ",ux_angle)		   
				print("uy_angle = ",uy_angle)		   
				print("x_angle = ",self.x_angle)		
				print("y_angle = ",self.y_angle)		
			self.x_axis.duty(2.5+x_angle_duty)		      
			self.y_axis.duty(2.5+y_angle_duty)
			

victagayun
Posts: 7
Joined: Fri Oct 26, 2018 1:38 am

Re: K210(Sipeed M1) run face tracking PT demo with maixpy

Post by victagayun » Wed Dec 05, 2018 3:38 pm

Hello
Will you consider the same discount to be given on those same backers in Indiegogo in case they would order again?
In my case, I am short of cash right now that I would order different package, but maybe after December I could order more.

zepan
Posts: 9
Joined: Sat Nov 17, 2018 9:01 am

Re: K210(Sipeed M1) run face tracking PT demo with maixpy

Post by zepan » Wed Dec 05, 2018 3:44 pm

victagayun wrote:
Wed Dec 05, 2018 3:38 pm
Hello
Will you consider the same discount to be given on those same backers in Indiegogo in case they would order again?
In my case, I am short of cash right now that I would order different package, but maybe after December I could order more.
Sure, We will give discount or even donate boards for developer(who push codes or post issues).

OutoftheBOTS_
Posts: 449
Joined: Mon Nov 20, 2017 10:18 am

Re: K210(Sipeed M1) run face tracking PT demo with maixpy

Post by OutoftheBOTS_ » Wed Dec 05, 2018 10:17 pm

zepan wrote:
Wed Dec 05, 2018 3:44 pm
victagayun wrote:
Wed Dec 05, 2018 3:38 pm
Hello
Will you consider the same discount to be given on those same backers in Indiegogo in case they would order again?
In my case, I am short of cash right now that I would order different package, but maybe after December I could order more.
Sure, We will give discount or even donate boards for developer(who push codes or post issues).
You will need to start an English forum for your board. At the moment there only seems to be Chinese forum and google won't translate it. Once there is a English forum there will be much more sharing and learning of users. Also in the beginning the forum will need to be supported heavily by the manufacture but as more users learn and become experienced then the more experienced users can help the new users on the forum and this will lower the work load on the manufacturer.

kevinkk525
Posts: 215
Joined: Sat Feb 03, 2018 7:02 pm

Re: K210(Sipeed M1) run face tracking PT demo with maixpy

Post by kevinkk525 » Thu Dec 06, 2018 9:02 am

OutoftheBOTS_ wrote:
Wed Dec 05, 2018 10:17 pm
zepan wrote:
Wed Dec 05, 2018 3:44 pm
victagayun wrote:
Wed Dec 05, 2018 3:38 pm
Hello
Will you consider the same discount to be given on those same backers in Indiegogo in case they would order again?
In my case, I am short of cash right now that I would order different package, but maybe after December I could order more.
Sure, We will give discount or even donate boards for developer(who push codes or post issues).
You will need to start an English forum for your board. At the moment there only seems to be Chinese forum and google won't translate it. Once there is a English forum there will be much more sharing and learning of users. Also in the beginning the forum will need to be supported heavily by the manufacture but as more users learn and become experienced then the more experienced users can help the new users on the forum and this will lower the work load on the manufacturer.
Even corporations creating bigger devices like odroid do have an english forum supported by the developers and it works out very well for them.

zepan
Posts: 9
Joined: Sat Nov 17, 2018 9:01 am

Re: K210(Sipeed M1) run face tracking PT demo with maixpy

Post by zepan » Thu Dec 06, 2018 10:09 am

kevinkk525 wrote:
Thu Dec 06, 2018 9:02 am
OutoftheBOTS_ wrote:
Wed Dec 05, 2018 10:17 pm
zepan wrote:
Wed Dec 05, 2018 3:44 pm


Sure, We will give discount or even donate boards for developer(who push codes or post issues).
You will need to start an English forum for your board. At the moment there only seems to be Chinese forum and google won't translate it. Once there is a English forum there will be much more sharing and learning of users. Also in the beginning the forum will need to be supported heavily by the manufacture but as more users learn and become experienced then the more experienced users can help the new users on the forum and this will lower the work load on the manufacturer.
Even corporations creating bigger devices like odroid do have an english forum supported by the developers and it works out very well for them.
we are building forum now, will online next week.

Post Reply