Skip to content
Snippets Groups Projects
Commit c7eb94a7 authored by mosesafr's avatar mosesafr
Browse files

drone image processing v1

parent ffe02d17
No related branches found
No related tags found
No related merge requests found
Showing
with 53 additions and 29 deletions
Factory_Automation/Drone/S_image.jpg

57 KiB

No preview for this file type
Factory_Automation/Drone/blackPoleImage.jpg

99 KiB | W: | H:

Factory_Automation/Drone/blackPoleImage.jpg

67.3 KiB | W: | H:

Factory_Automation/Drone/blackPoleImage.jpg
Factory_Automation/Drone/blackPoleImage.jpg
Factory_Automation/Drone/blackPoleImage.jpg
Factory_Automation/Drone/blackPoleImage.jpg
  • 2-up
  • Swipe
  • Onion skin
Factory_Automation/Drone/captured_image.jpg

73.1 KiB | W: | H:

Factory_Automation/Drone/captured_image.jpg

67.6 KiB | W: | H:

Factory_Automation/Drone/captured_image.jpg
Factory_Automation/Drone/captured_image.jpg
Factory_Automation/Drone/captured_image.jpg
Factory_Automation/Drone/captured_image.jpg
  • 2-up
  • Swipe
  • Onion skin
Factory_Automation/Drone/circle_segmented_image.jpg

113 KiB | W: | H:

Factory_Automation/Drone/circle_segmented_image.jpg

71.3 KiB | W: | H:

Factory_Automation/Drone/circle_segmented_image.jpg
Factory_Automation/Drone/circle_segmented_image.jpg
Factory_Automation/Drone/circle_segmented_image.jpg
Factory_Automation/Drone/circle_segmented_image.jpg
  • 2-up
  • Swipe
  • Onion skin
Factory_Automation/Drone/contour_image.jpg

110 KiB | W: | H:

Factory_Automation/Drone/contour_image.jpg

71.3 KiB | W: | H:

Factory_Automation/Drone/contour_image.jpg
Factory_Automation/Drone/contour_image.jpg
Factory_Automation/Drone/contour_image.jpg
Factory_Automation/Drone/contour_image.jpg
  • 2-up
  • Swipe
  • Onion skin
Factory_Automation/Drone/copper_extracted_image.jpg

85.7 KiB | W: | H:

Factory_Automation/Drone/copper_extracted_image.jpg

9.3 KiB | W: | H:

Factory_Automation/Drone/copper_extracted_image.jpg
Factory_Automation/Drone/copper_extracted_image.jpg
Factory_Automation/Drone/copper_extracted_image.jpg
Factory_Automation/Drone/copper_extracted_image.jpg
  • 2-up
  • Swipe
  • Onion skin
Factory_Automation/Drone/dark_regions_extracted_image.jpg

15 KiB

Factory_Automation/Drone/dark_regions_image.jpg

10.6 KiB

Factory_Automation/Drone/dark_regions_mask.jpg

14 KiB

Factory_Automation/Drone/dark_regions_masked_image.jpg

34 KiB

Factory_Automation/Drone/h_image.jpg

35.3 KiB

......@@ -12,6 +12,25 @@ class PositionTriangulator:
return cls._instance
def extract_dark_regions(cls, original_image):
# Extract brightness channel from image
hsv_img = cv2.cvtColor(original_image, cv2.COLOR_BGR2HSV)
cls.log_image("h_image.jpg", hsv_img[:,:,0])
cls.log_image("S_image.jpg", hsv_img[:,:,1])
cls.log_image("v_image.jpg", hsv_img[:,:,2])
brightness_img = hsv_img[:,:,2]
# Average
brightness_img = cv2.boxFilter(brightness_img, -1, (3,3))
# mask
mask_darkness = cv2.inRange(brightness_img,0,80)
cls.log_image("dark_regions_mask.jpg", mask_darkness)
dark_regions_extracted = cv2.bitwise_and(original_image,original_image, mask = mask_darkness)
return dark_regions_extracted, mask_darkness
def draw_contours(cls,original_image, copper_extracted_image):
contours, _ = cv2.findContours(copper_extracted_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
......@@ -60,11 +79,17 @@ class PositionTriangulator:
def determine_current_position(cls):
# read for now
#captured_image = cls.drone_camera.capture_image()
captured_image = cv2.imread("SnapshotTest1.jpg")
captured_image = cv2.imread("blackPoleImage.jpg")
cls.log_image("captured_image.jpg", captured_image)
copper_extracted_image, mask_copper_image = cls.extract_copper_hue(captured_image)
dark_regions_masked_image,mask_dark = cls.extract_dark_regions(captured_image)
cls.log_image("dark_regions_extracted_image.jpg", dark_regions_masked_image)
copper_extracted_image, mask_copper = cls.extract_copper_hue(captured_image)
cls.log_image("copper_extracted_image.jpg", copper_extracted_image)
contour_image = cls.draw_contours(captured_image,mask_copper_image)
# Combine copper and dark mask
contour_image = cls.draw_contours(captured_image,mask_copper)
cls.log_image("contour_image.jpg", contour_image)
circle_segmented_image = cls.extract_areas_of_interest(captured_image, contour_image)
cls.log_image("circle_segmented_image.jpg", circle_segmented_image)
......
Factory_Automation/Drone/v_image.jpg

61.3 KiB

No preview for this file type
No preview for this file type
No preview for this file type
......@@ -2,21 +2,18 @@ import numpy as np
import pickle
def main():
grid_matrix = [
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[1,0,0,0,1,1,1,1,1,0,0,0,1,1,1],
[1,0,0,0,1,1,1,1,1,0,0,0,1,1,1],
[1,0,0,0,1,0,0,0,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,0,0,1,0,0,0,1,1,1,1],
[1,1,1,1,1,0,0,1,0,0,1,1,1,1,1],
[1,1,1,1,1,0,0,1,0,0,1,1,1,1,0],
[1,1,1,1,1,0,0,1,0,0,1,1,1,1,0],
[1,0,0,0,1,1,1,1,1,1,1,1,1,1,0]
[0,0,0,0,0,0,0],
[0,1,1,1,1,1,0],
[0,1,0,1,0,1,0],
[0,1,1,1,1,1,0],
[0,1,0,1,0,1,0],
[0,1,1,1,1,1,0],
[0,0,0,0,0,0,0]
]
grid_array = np.array(grid_matrix)
np.save('Mothership/Application/Core/grid.npy', grid_array)
np.save('grid.npy', grid_array)
if __name__ == "__main__":
main()
\ No newline at end of file
......@@ -22,15 +22,15 @@ class BLEClientPi:
def send(cls, data):
cls.bluetoothClient.send(data)
def send_command(cls, command):
def send_command(cls, command:DCE):
# 100 ms delay to seperate commands
sleep(0.1)
cls.bluetoothClient.send(command)
cls.bluetoothClient.send(command.get_name())
def send_data(cls,data:str):
# 100 ms delay to seperate commands
sleep(0.1)
cls.bluetoothServer.send(data)
cls.bluetoothClient.send(data)
def process_data(data):
try:
......@@ -47,26 +47,25 @@ class BLEClientPi:
def connect(cls):
try:
cls.bluetoothClient = BluetoothClient("DC:A6:32:18:4C:22", cls.data_received)
cls.send_command(DCE.Clear_Queue.get_name())
cls.send_command(DCE.Clear_Queue)
keypress = ""
keypress = input("Enter Command")
while keypress.upper() != "Q":
keypress = input("Enter Command")
keypress = keypress.upper()
cls.send_command(keypress)
#cls.send_command(DroneCommandEnum.W.get_name())
#cls.send_command(DroneCommandEnum.A.get_name())
#cls.send_command(DroneCommandEnum.S.get_name())
#cls.send_command(DroneCommandEnum.D.get_name())
cls.send_command(DCE.get_enum_by_name(keypress))
keypress = input("Enter Command")
cls.send_data(str(1))
cls.send_data(str(1))
cls.send_command(DCE.Move)
finally:
cls.bluetoothClient.disconnect()
def main():
bluetoothClient = BLEClientPi()
bluetoothClient.connect()
bluetoothClient.send_data(str(1))
bluetoothClient.send_data(str(1))
bluetoothClient.send_command(DCE.Move)
if __name__ == "__main__":
main()
......
......@@ -4,7 +4,8 @@ class DroneStatusEnum(Enum):
Location_Known = 2
Moving = 3
Stopped = 4
Unrecognized_Command = 5
Idle = 5
Unrecognized_Command = 6
def get_name(self):
status_names = {
......@@ -12,6 +13,7 @@ class DroneStatusEnum(Enum):
DroneStatusEnum.Location_Known: "Location_Known",
DroneStatusEnum.Moving: "Moving",
DroneStatusEnum.Stopped: "Stopped",
DroneStatusEnum.Idle: "Idle",
DroneStatusEnum.Unrecognized_Command: "Unrecognized_Command"
}
return status_names[self]
......@@ -22,6 +24,7 @@ class DroneStatusEnum(Enum):
"Location_Known": DroneStatusEnum.Location_Known,
"Moving": DroneStatusEnum.Moving,
"Stopped": DroneStatusEnum.Stopped,
"Idle": DroneStatusEnum.Idle,
"Unrecognized_Command": DroneStatusEnum.Unrecognized_Command
}
return status_names[name]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment