Clean up project directory.

This commit is contained in:
Piv
2020-02-21 20:59:04 +10:30
parent 178d2b8d57
commit 0ba967c997
10 changed files with 29 additions and 248 deletions

View File

@@ -1,79 +0,0 @@
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 22 14:16:46 2018
@author: pivatom
"""
import numpy as np
import cv2
img = cv2.imread('H:\car\GestureRecognition\IMG_0818.png', 1)
# Downscale the image
img = cv2.resize(img, None, fx=0.1, fy=0.1, interpolation = cv2.INTER_AREA)
min_seg_threshold = 1.2
max_seg_threshold = 1.8
# Need to make this get correct skin tones.
# img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# img_gray[img_gray[:,:] > 90] = 255
# img_gray[img_gray[:,:] < 90] = 0
img_bin = np.zeros(shape=(img.shape[0], img.shape[1]), dtype=int)
img = np.where(img[:,:,1] == 0, 0, img[:,:,1])
img[(img[:,:,2]/img[:,:,1] > min_seg_threshold) & (img[:,:,2]/img[:,:,1] < max_seg_threshold)] = [255,255,255]
# Threshold to binary.
ret,img_thresh = cv2.threshold(img_bin, 127, 255, cv2.THRESH_BINARY)
# Following method is much faster -> 0.00143s
# Still want to speed up further by lowering reliance on memory, which is quite heavy..
k = np.sum(img_thresh) / 255
# Taking indices for num of rows.
x_ind = np.arange(0,img_thresh.shape[1])
y_ind = np.arange(0,img_thresh.shape[0])
coords = np.zeros((img_thresh.shape[0], img_thresh.shape[1], 2))
coords_x = np.zeros((img_thresh.shape[0], img_thresh.shape[1]))
coords_y = np.zeros((img_thresh.shape[0], img_thresh.shape[1]))
coords_x[:,:] = x_ind
# Even this is extremely quick as it goes through rows in the numpy array, which in python is much faster than columns
for element in y_ind:
coords_y[element,:] = element
# Now need to get the average x value and y value for centre of gravity
xb = int(np.sum(coords_x[img_thresh == 255])/k)
yb = int(np.sum(coords_y[img_thresh == 255])/k)
centre = (int(np.sum(coords_x[img_thresh == 255])/k), int(np.sum(coords_y[img_thresh == 255])/k))
#x,y,k,xb,yb = 0,0,0,0,0
#
## this is inherently slow...like very very slow...0.114s
#for pix in img_thresh:
# for j in pix:
# if j == 255:
# k += 1
# xb += x
# yb += y
# x += 1
# y += 1
# x = 0
#
#centre = (int(xb/k), int(yb/k))
cv2.rectangle(img_thresh, centre, (centre[0] + 20, centre[1] + 20), (0,0,255), 3)
cv2.circle(img_thresh, centre, 140, (0,0,0), 3)
# Now need to trace around the circle to figure out where the fingers are.
# First get equation of the circle:
# y = sart(r2 - (x-c)2 + c)
cv2.imshow("Binary-cot-out", img_thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

View File

@@ -1,34 +0,0 @@
import numpy as np
import cv2
img = cv2.imread('H:\car\GestureRecognition\IMG_0818.png', 1)
# Downscale the image
img = cv2.resize(img, None, fx=0.1, fy=0.1, interpolation = cv2.INTER_AREA)
min_seg_threshold = 1.2
max_seg_threshold = 3
# prevent divide by zero, by just forcing pixel to be ignored.
np.where(img[:,:,1] == 0, 0, img[:,:,1])
img[(img[:,:,2]/img[:,:,1] > min_seg_threshold) & (img[:,:,2]/img[:,:,1] < max_seg_threshold)] = [255,255,255]
# Try removing image noise.
#img = cv2.fastNlMeansDenoising(img)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# Remove non-hand parts
# Find centre of the hand
# Hand parts are white pixels.
# Find sum of each col/row to find the left/rightmost and top/bottommost white pixels.
# Have used a for loop but obviously that is going to be slow.
# Draw appropriate circle
# Calculate number of different peaks.
# Article just traced around the circle and counted number of times switched from
# zero to one.

View File

@@ -30,7 +30,7 @@ class SimpleHandRecogniser(HandRecogniser):
# Apply another blur to rmeove any small holes/noise
self.img_cut = self.__denoise(self.img_cut)
ret, self.img_cut = cv2.threshold(self.img_cut, 50, 255, cv2.THRESH_BINARY)
_, self.img_cut = cv2.threshold(self.img_cut, 50, 255, cv2.THRESH_BINARY)
def __denoise(self, image):
"""

View File

@@ -1,124 +0,0 @@
# This program will let you test your ESC and brushless motor.
# Make sure your battery is not connected if you are going to calibrate it at first.
# Since you are testing your motor, I hope you don't have your propeller attached to it otherwise you are in trouble my friend...?
# This program is made by AGT @instructable.com. DO NOT REPUBLISH THIS PROGRAM... actually the program itself is harmful pssst Its not, its safe.
import os #importing os library so as to communicate with the system
import time #importing time library to make Rpi wait because its too impatient
os.system ("sudo pigpiod") #Launching GPIO library, will say it can't connect if already running
time.sleep(1) # As i said it is too impatient and so if this delay is removed you will get an error
import pigpio #importing GPIO library
ESC=19 #Connect the ESC in this GPIO pin
pi = pigpio.pi();
pi.set_servo_pulsewidth(ESC, 0)
max_value = 2000 #change this if your ESC's max value is different or leave it be
min_value = 1000 #change this if your ESC's min value is different or leave it be
print("For first time launch, select calibrate")
print("Type the exact word for the function you want")
print("calibrate OR manual OR control OR arm OR stop")
def manual_drive(): #You will use this function to program your ESC if required
print("You have selected manual option so give a value between 0 and you max value")
while True:
inp = input()
if inp == "stop":
stop()
break
elif inp == "control":
control()
break
elif inp == "arm":
arm()
break
else:
pi.set_servo_pulsewidth(ESC,inp)
def calibrate(): #This is the auto calibration procedure of a normal ESC
pi.set_servo_pulsewidth(ESC, 0)
print("Disconnect the battery and press Enter")
inp = input()
if inp == '':
pi.set_servo_pulsewidth(ESC, max_value)
print("Connect the battery NOW.. you will here two beeps, then wait for a gradual falling tone then press Enter")
inp = input()
if inp == '':
pi.set_servo_pulsewidth(ESC, min_value)
print("Wierd eh! Special tone")
time.sleep(7)
print("Wait for it ....")
time.sleep (5)
print("Im working on it, DONT WORRY JUST WAIT.....")
pi.set_servo_pulsewidth(ESC, 0)
time.sleep(2)
print("Arming ESC now...")
pi.set_servo_pulsewidth(ESC, min_value)
time.sleep(1)
print("See.... uhhhhh")
control() # You can change this to any other function you want
def control():
print("I'm Starting the motor, I hope its calibrated and armed, if not restart by giving 'x'")
time.sleep(1)
speed = 1500 # change your speed if you want to.... it should be between 700 - 2000
print("Controls - a to decrease speed & d to increase speed OR q to decrease a lot of speed & e to increase a lot of speed")
while True:
pi.set_servo_pulsewidth(ESC, speed)
inp = input()
if inp == "q":
speed -= 100 # decrementing the speed like hell
print("speed = %d" % speed)
elif inp == "e":
speed += 100 # incrementing the speed like hell
print("speed = %d" % speed)
elif inp == "d":
speed += 10 # incrementing the speed
print("speed = %d" % speed)
elif inp == "a":
speed -= 10 # decrementing the speed
print("speed = %d" % speed)
elif inp == "stop":
stop() #going for the stop function
break
elif inp == "manual":
manual_drive()
break
elif inp == "arm":
arm()
break
else:
print("WHAT DID I SAID!! Press a,q,d or e")
def arm(): #This is the arming procedure of an ESC
print("Connect the battery and press Enter")
inp = input()
if inp == '':
pi.set_servo_pulsewidth(ESC, 0)
time.sleep(1)
pi.set_servo_pulsewidth(ESC, max_value)
time.sleep(1)
pi.set_servo_pulsewidth(ESC, min_value)
time.sleep(1)
control()
def stop(): #This will stop every action your Pi is performing for ESC ofcourse.
pi.set_servo_pulsewidth(ESC, 0)
pi.stop()
#This is the start of the program actually, to start the function it needs to be initialized before calling... stupid python.
inp = input()
if inp == "manual":
manual_drive()
elif inp == "calibrate":
calibrate()
elif inp == "arm":
arm()
elif inp == "control":
control()
elif inp == "stop":
stop()
else:
print("Thank You for not following the things I'm saying... now you gotta restart the program STUPID!!")

View File

View File

@@ -1,4 +1,3 @@
import os
from gpiozero import Servo, Device
from gpiozero.pins.pigpio import PiGPIOFactory
import subprocess

View File

View File

@@ -1,7 +1,8 @@
import rplidar
from rplidar import RPLidar
from threading import Thread
import algorithms
from persontracking import algorithms
import zmq
class LidarCache():
'''
@@ -14,7 +15,8 @@ class LidarCache():
currentGroups = None
groupsChanged = []
def __init__(self, measurements=100):
def __init__(self, port, measurements=100):
self.port = port
self.lidar = RPLidar('/dev/ttyUSB0')
self.measurements = measurements
print('Info: ' + self.lidar.get_info())
@@ -28,6 +30,11 @@ class LidarCache():
'''
Performs a scan for the given number of iterations.
'''
# Create the 0MQ socket first. This should not be passed between threads.
self._socket = self._create_socket()
self._socket.bind("tcp://*:" + str(self.port))
for i, scan in enumerate(self.lidar.iter_scans(min_len=self.measurements)):
print('%d: Got %d measurments' % (i, len(scan)))
if(not self.run):
@@ -40,7 +47,13 @@ class LidarCache():
self.currentGroups = algorithms.calc_groups(scan)
def fireGroupsChanged(self):
# Send the updated groups to 0MQ socket.
# self._socket.send_multipart(["lidar_map", ...])
pass
def stop_scanning(self):
self.run = False
def _create_socket(self):
return zmq.Context.instance().socket(zmq.PUB)

View File

@@ -1,7 +1,10 @@
import lidar_tracker_pb2
import lidar_tracker_pb2_grpc
from .lidar_cache import LidarCache
class LidarServicer(lidar_tracker_pb2_grpc.PersonTrackingServicer):
import persontracking.lidar_tracker_pb2 as lidar_tracker_pb2
from persontracking.lidar_tracker_pb2_grpc import PersonTrackingServicer
from persontracking.lidar_cache import LidarCache\
class LidarServicer(PersonTrackingServicer):
def __init__(self):
self.cache = LidarCache(measurements=100)
@@ -21,5 +24,4 @@ class LidarServicer(lidar_tracker_pb2_grpc.PersonTrackingServicer):
Starts the lidar cache.
'''
pass

View File

@@ -24,6 +24,10 @@ message PointScan{
repeated Point points = 1;
}
message TrackingInfo{
int32 port = 1;
}
service PersonTracking{
rpc set_tracking_group(Int32Value) returns (Empty) {}
@@ -31,5 +35,5 @@ service PersonTracking{
rpc get_scan_data(Empty) returns (PointScan) {}
rpc start_tracking(Empty) returns (Empty) {}
rpc start_tracking(TrackingInfo) returns (Empty) {}
}