face detection ros2 module working

master
Jake Wilkinson 2025-11-09 19:57:41 +08:00
parent c2d0bf956b
commit fbbddb4bd0
16 changed files with 819 additions and 417 deletions

View File

@ -11,27 +11,27 @@ from std_msgs.msg import String
import rclpy
class CamPublisher(ThreadedNode):
def __init__(self):
def __init__(self, rknn, cap):
super().__init__('camera_module', default_rate=5.0)
self.string_pub = self.create_publisher(String, 'camera_module/cam_topic', 10)
self.image_pub = self.create_publisher(CompressedImage, 'camera_module/compressed', 10)
# Try multiple device indices
self.cap = None
for i in range(5):
cap = cv2.VideoCapture(i)
if cap.isOpened():
self.rknn = rknn
self.cap = cap
self.get_logger().info(f'Opened webcam at index {i}')
break
self.latest_frame = None
self.latest_faces = []
self.model_size = (320, 320)
self.priors = PriorBox(self.model_size)
self.prev_time = time.time()
if self.cap is None:
self.get_logger().error('Failed to open any webcam')
# Lower resolution
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
# Faster JPEG encoding
@ -50,30 +50,161 @@ class CamPublisher(ThreadedNode):
self.get_logger().error('No webcam available')
return
ret, frame = self.cap.read()
if not ret or frame is None:
self.get_logger().error('Camera read failed')
ret, frame = cap.read()
if not ret:
return
img_height, img_width, _ = frame.shape
letterbox_img, aspect_ratio, offset_x, offset_y = letterbox_resize(frame, model_size, 114)
infer_img = np.expand_dims(letterbox_img.astype(np.uint8), axis=0)
outputs = rknn.inference(inputs=[infer_img])
if outputs is None:
return
try:
msg = CompressedImage()
msg.header.stamp = self.get_clock().now().to_msg()
msg.format = 'jpeg'
msg.data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 50])[1].tobytes()
#msg.data = cv2.imencode('.jpg', frame)[1].tobytes()
self.image_pub.publish(msg)
self.get_logger().info('Published webcam frame')
except Exception as e:
self.get_logger().error(f'Failed to convert/publish image: {e}')
loc, conf, landms = outputs
boxes = box_decode(loc.squeeze(0), priors)
boxes *= np.array([model_size[1], model_size[0], model_size[1], model_size[0]])
boxes[:, 0::2] = np.clip((boxes[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
boxes[:, 1::2] = np.clip((boxes[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
scores = conf.squeeze(0)[:, 1]
landms = decode_landm(landms.squeeze(0), priors)
landms *= np.tile(np.array([model_size[1], model_size[0]]), 5)
landms[:, 0::2] = np.clip((landms[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
landms[:, 1::2] = np.clip((landms[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
inds = np.where(scores > 0.2)[0]
boxes, landms, scores = boxes[inds], landms[inds], scores[inds]
order = scores.argsort()[::-1]
boxes, landms, scores = boxes[order], landms[order], scores[order]
dets = np.hstack((boxes, scores[:, np.newaxis])).astype(np.float32)
keep = nms(dets, 0.5)
dets, landms = dets[keep], landms[keep]
face_data = []
frame_center = np.array([img_width / 2, img_height / 2])
for data, landmark in zip(dets, landms):
if data[4] < 0.6:
continue
x1, y1, x2, y2 = map(int, data[:4])
conf = data[4]
box_center = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
offset = box_center - frame_center
face_data.append({
"box": [x1, y1, x2, y2],
"confidence": float(conf),
"offset_from_center": {
"x": float(offset[0]),
"y": float(offset[1])
}
})
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.putText(frame, f'{conf:.4f}', (x1, y1 + 12), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
for j in range(5):
lx, ly = map(int, landmark[j*2:j*2+2])
cv2.circle(frame, (lx, ly), 1, (0, 255, 255), 2)
cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
if len(face_data) > 0:
print(face_data)
ret, buffer = cv2.imencode('.jpg', frame)
if ret:
latest_frame = buffer.tobytes()
latest_faces = face_data
def destroy_node(self):
if self.cap:
self.cap.release()
super().destroy_node()
# --- RetinaFace Utilities ---
def letterbox_resize(image, size, bg_color):
target_width, target_height = size
image_height, image_width, _ = image.shape
aspect_ratio = min(target_width / image_width, target_height / image_height)
new_width = int(image_width * aspect_ratio)
new_height = int(image_height * aspect_ratio)
image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)
result_image = np.ones((target_height, target_width, 3), dtype=np.uint8) * bg_color
offset_x = (target_width - new_width) // 2
offset_y = (target_height - new_height) // 2
result_image[offset_y:offset_y + new_height, offset_x:offset_x + new_width] = image
return result_image, aspect_ratio, offset_x, offset_y
def PriorBox(image_size):
anchors = []
min_sizes = [[16, 32], [64, 128], [256, 512]]
steps = [8, 16, 32]
feature_maps = [[ceil(image_size[0] / step), ceil(image_size[1] / step)] for step in steps]
for k, f in enumerate(feature_maps):
min_sizes_ = min_sizes[k]
for i, j in product(range(f[0]), range(f[1])):
for min_size in min_sizes_:
s_kx = min_size / image_size[1]
s_ky = min_size / image_size[0]
dense_cx = [x * steps[k] / image_size[1] for x in [j + 0.5]]
dense_cy = [y * steps[k] / image_size[0] for y in [i + 0.5]]
for cy, cx in product(dense_cy, dense_cx):
anchors += [cx, cy, s_kx, s_ky]
return np.array(anchors).reshape(-1, 4)
def box_decode(loc, priors):
variances = [0.1, 0.2]
boxes = np.concatenate((
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
priors[:, 2:] * np.exp(loc[:, 2:] * variances[1])), axis=1)
boxes[:, :2] -= boxes[:, 2:] / 2
boxes[:, 2:] += boxes[:, :2]
return boxes
def decode_landm(pre, priors):
variances = [0.1, 0.2]
landmarks = np.concatenate((
priors[:, :2] + pre[:, 0:2] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 2:4] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 4:6] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 6:8] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 8:10] * variances[0] * priors[:, 2:]
), axis=1)
return landmarks
def nms(dets, thresh):
x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4]
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
order = scores.argsort()[::-1]
keep = []
while order.size > 0:
i = order[0]
keep.append(i)
xx1 = np.maximum(x1[i], x1[order[1:]])
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])
w = np.maximum(0.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
inter = w * h
ovr = inter / (areas[i] + areas[order[1:]] - inter)
inds = np.where(ovr <= thresh)[0]
order = order[inds + 1]
return keep
# --- RKNN Initialization ---
rknn = RKNNLite()
rknn.load_rknn('./RetinaFace.rknn')
rknn.init_runtime()
# --- Shared State ---
latest_frame = None
latest_faces = []
cap = cv2.VideoCapture(0)
def main():
rclpy.init()
node = CamPublisher()
node = CamPublisher(rknn, cap)
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()

View File

@ -16,7 +16,6 @@ LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=jake
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.crdownload=00;90:*.dpkg-dist=00;90:*.dpkg-new=00;90:*.dpkg-old=00;90:*.dpkg-tmp=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:*.swp=00;90:*.tmp=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:
MOTD_SHOWN=update-motd
NAME=DESKTOP-UFLG41E
OLDPWD=/home/jake/ros2_ws
PATH=/home/jake/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/bin/remote-cli:/home/jake/.local/bin:/home/jake/miniconda3/condabin:/opt/ros/kilted/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/wsl/lib:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files/Docker/Docker/resources/bin:/mnt/c/Program Files/usbipd-win/:/mnt/c/Users/jake/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/jake/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin:/home/jake/.vscode-server/data/User/globalStorage/github.copilot-chat/debugCommand
@ -37,13 +36,13 @@ VSCODE_GIT_ASKPASS_EXTRA_ARGS=
VSCODE_GIT_ASKPASS_MAIN=/home/jake/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/extensions/git/dist/askpass-main.js
VSCODE_GIT_ASKPASS_NODE=/home/jake/.vscode-server/bin/7d842fb85a0275a4a8e4d7e040d2625abbf7f084/node
VSCODE_GIT_IPC_HANDLE=/run/user/1001/vscode-git-1d6e8e65c1.sock
VSCODE_IPC_HOOK_CLI=/run/user/1001/vscode-ipc-a80506a6-314e-4f1a-bfb0-04fa92945475.sock
VSCODE_IPC_HOOK_CLI=/run/user/1001/vscode-ipc-07b86bca-e4f9-4c18-ba3e-d1abb3d5b6bc.sock
VSCODE_PYTHON_AUTOACTIVATE_GUARD=1
WAYLAND_DISPLAY=wayland-0
WSL2_GUI_APPS_ENABLED=1
WSLENV=VSCODE_WSL_EXT_LOCATION/up
WSL_DISTRO_NAME=Ubuntu-24.04
WSL_INTEROP=/run/WSL/170769_interop
WSL_INTEROP=/run/WSL/440_interop
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
XDG_RUNTIME_DIR=/run/user/1001/
_=/usr/bin/colcon

View File

@ -58,7 +58,7 @@
<img id="cameraImage" width="640" height="480" alt="Camera Feed">
<script>
const ros = new ROSLIB.Ros({ url: 'ws://localhost:9090' });
const ros = new ROSLIB.Ros({ url: 'ws://192.168.1.205:9090' });
ros.on('connection', () => {
console.log('Connected to rosbridge');

View File

@ -11,27 +11,27 @@ from std_msgs.msg import String
import rclpy
class CamPublisher(ThreadedNode):
def __init__(self):
def __init__(self, rknn, cap):
super().__init__('camera_module', default_rate=5.0)
self.string_pub = self.create_publisher(String, 'camera_module/cam_topic', 10)
self.image_pub = self.create_publisher(CompressedImage, 'camera_module/compressed', 10)
# Try multiple device indices
self.cap = None
for i in range(5):
cap = cv2.VideoCapture(i)
if cap.isOpened():
self.rknn = rknn
self.cap = cap
self.get_logger().info(f'Opened webcam at index {i}')
break
self.latest_frame = None
self.latest_faces = []
self.model_size = (320, 320)
self.priors = PriorBox(self.model_size)
self.prev_time = time.time()
if self.cap is None:
self.get_logger().error('Failed to open any webcam')
# Lower resolution
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
# Faster JPEG encoding
@ -50,30 +50,161 @@ class CamPublisher(ThreadedNode):
self.get_logger().error('No webcam available')
return
ret, frame = self.cap.read()
if not ret or frame is None:
self.get_logger().error('Camera read failed')
ret, frame = cap.read()
if not ret:
return
img_height, img_width, _ = frame.shape
letterbox_img, aspect_ratio, offset_x, offset_y = letterbox_resize(frame, model_size, 114)
infer_img = np.expand_dims(letterbox_img.astype(np.uint8), axis=0)
outputs = rknn.inference(inputs=[infer_img])
if outputs is None:
return
try:
msg = CompressedImage()
msg.header.stamp = self.get_clock().now().to_msg()
msg.format = 'jpeg'
msg.data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 50])[1].tobytes()
#msg.data = cv2.imencode('.jpg', frame)[1].tobytes()
self.image_pub.publish(msg)
self.get_logger().info('Published webcam frame')
except Exception as e:
self.get_logger().error(f'Failed to convert/publish image: {e}')
loc, conf, landms = outputs
boxes = box_decode(loc.squeeze(0), priors)
boxes *= np.array([model_size[1], model_size[0], model_size[1], model_size[0]])
boxes[:, 0::2] = np.clip((boxes[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
boxes[:, 1::2] = np.clip((boxes[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
scores = conf.squeeze(0)[:, 1]
landms = decode_landm(landms.squeeze(0), priors)
landms *= np.tile(np.array([model_size[1], model_size[0]]), 5)
landms[:, 0::2] = np.clip((landms[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
landms[:, 1::2] = np.clip((landms[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
inds = np.where(scores > 0.2)[0]
boxes, landms, scores = boxes[inds], landms[inds], scores[inds]
order = scores.argsort()[::-1]
boxes, landms, scores = boxes[order], landms[order], scores[order]
dets = np.hstack((boxes, scores[:, np.newaxis])).astype(np.float32)
keep = nms(dets, 0.5)
dets, landms = dets[keep], landms[keep]
face_data = []
frame_center = np.array([img_width / 2, img_height / 2])
for data, landmark in zip(dets, landms):
if data[4] < 0.6:
continue
x1, y1, x2, y2 = map(int, data[:4])
conf = data[4]
box_center = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
offset = box_center - frame_center
face_data.append({
"box": [x1, y1, x2, y2],
"confidence": float(conf),
"offset_from_center": {
"x": float(offset[0]),
"y": float(offset[1])
}
})
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.putText(frame, f'{conf:.4f}', (x1, y1 + 12), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
for j in range(5):
lx, ly = map(int, landmark[j*2:j*2+2])
cv2.circle(frame, (lx, ly), 1, (0, 255, 255), 2)
cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
if len(face_data) > 0:
print(face_data)
ret, buffer = cv2.imencode('.jpg', frame)
if ret:
latest_frame = buffer.tobytes()
latest_faces = face_data
def destroy_node(self):
if self.cap:
self.cap.release()
super().destroy_node()
# --- RetinaFace Utilities ---
def letterbox_resize(image, size, bg_color):
target_width, target_height = size
image_height, image_width, _ = image.shape
aspect_ratio = min(target_width / image_width, target_height / image_height)
new_width = int(image_width * aspect_ratio)
new_height = int(image_height * aspect_ratio)
image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)
result_image = np.ones((target_height, target_width, 3), dtype=np.uint8) * bg_color
offset_x = (target_width - new_width) // 2
offset_y = (target_height - new_height) // 2
result_image[offset_y:offset_y + new_height, offset_x:offset_x + new_width] = image
return result_image, aspect_ratio, offset_x, offset_y
def PriorBox(image_size):
anchors = []
min_sizes = [[16, 32], [64, 128], [256, 512]]
steps = [8, 16, 32]
feature_maps = [[ceil(image_size[0] / step), ceil(image_size[1] / step)] for step in steps]
for k, f in enumerate(feature_maps):
min_sizes_ = min_sizes[k]
for i, j in product(range(f[0]), range(f[1])):
for min_size in min_sizes_:
s_kx = min_size / image_size[1]
s_ky = min_size / image_size[0]
dense_cx = [x * steps[k] / image_size[1] for x in [j + 0.5]]
dense_cy = [y * steps[k] / image_size[0] for y in [i + 0.5]]
for cy, cx in product(dense_cy, dense_cx):
anchors += [cx, cy, s_kx, s_ky]
return np.array(anchors).reshape(-1, 4)
def box_decode(loc, priors):
variances = [0.1, 0.2]
boxes = np.concatenate((
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
priors[:, 2:] * np.exp(loc[:, 2:] * variances[1])), axis=1)
boxes[:, :2] -= boxes[:, 2:] / 2
boxes[:, 2:] += boxes[:, :2]
return boxes
def decode_landm(pre, priors):
variances = [0.1, 0.2]
landmarks = np.concatenate((
priors[:, :2] + pre[:, 0:2] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 2:4] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 4:6] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 6:8] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 8:10] * variances[0] * priors[:, 2:]
), axis=1)
return landmarks
def nms(dets, thresh):
x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4]
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
order = scores.argsort()[::-1]
keep = []
while order.size > 0:
i = order[0]
keep.append(i)
xx1 = np.maximum(x1[i], x1[order[1:]])
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])
w = np.maximum(0.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
inter = w * h
ovr = inter / (areas[i] + areas[order[1:]] - inter)
inds = np.where(ovr <= thresh)[0]
order = order[inds + 1]
return keep
# --- RKNN Initialization ---
rknn = RKNNLite()
rknn.load_rknn('./RetinaFace.rknn')
rknn.init_runtime()
# --- Shared State ---
latest_frame = None
latest_faces = []
cap = cv2.VideoCapture(0)
def main():
rclpy.init()
node = CamPublisher()
node = CamPublisher(rknn, cap)
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()

File diff suppressed because one or more lines are too long

View File

@ -1,43 +1,43 @@
[0.796s] Invoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
[1.041s] running egg_info
[1.041s] creating ../../build/camera_module/camera_module.egg-info
[1.062s] writing ../../build/camera_module/camera_module.egg-info/PKG-INFO
[1.062s] writing dependency_links to ../../build/camera_module/camera_module.egg-info/dependency_links.txt
[1.063s] writing entry points to ../../build/camera_module/camera_module.egg-info/entry_points.txt
[1.063s] writing requirements to ../../build/camera_module/camera_module.egg-info/requires.txt
[1.063s] writing top-level names to ../../build/camera_module/camera_module.egg-info/top_level.txt
[1.063s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
[1.104s] reading manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
[1.104s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
[1.105s] running build
[1.105s] running build_py
[1.105s] creating /home/jake/ros2_ws/build/camera_module/build
[1.106s] creating /home/jake/ros2_ws/build/camera_module/build/lib
[1.106s] creating /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.107s] copying ./camera_module/__init__.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.107s] copying ./camera_module/camera_module.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.107s] copying ./camera_module/threaded_node.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.107s] running install
[1.114s] running install_lib
[1.134s] creating /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.134s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/__init__.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.135s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/camera_module.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.135s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/threaded_node.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.135s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/__init__.py to __init__.cpython-312.pyc
[1.136s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/camera_module.py to camera_module.cpython-312.pyc
[1.137s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/threaded_node.py to threaded_node.cpython-312.pyc
[1.138s] running install_data
[1.139s] copying package.xml -> /home/jake/ros2_ws/install/camera_module/share/camera_module
[1.139s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource
[1.139s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
[1.140s] copying resource/model/RetinaFace.rknn -> /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
[1.141s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index
[1.142s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index
[1.142s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
[1.143s] copying resource/camera_module -> /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
[1.143s] running install_egg_info
[1.165s] Copying ../../build/camera_module/camera_module.egg-info to /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module-0.1.0-py3.12.egg-info
[1.166s] running install_scripts
[1.301s] Installing camera_module script to /home/jake/ros2_ws/install/camera_module/bin
[1.302s] writing list of installed files to '/home/jake/ros2_ws/build/camera_module/install.log'
[1.337s] Invoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
[0.774s] Invoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
[1.009s] running egg_info
[1.009s] creating ../../build/camera_module/camera_module.egg-info
[1.028s] writing ../../build/camera_module/camera_module.egg-info/PKG-INFO
[1.029s] writing dependency_links to ../../build/camera_module/camera_module.egg-info/dependency_links.txt
[1.029s] writing entry points to ../../build/camera_module/camera_module.egg-info/entry_points.txt
[1.030s] writing requirements to ../../build/camera_module/camera_module.egg-info/requires.txt
[1.030s] writing top-level names to ../../build/camera_module/camera_module.egg-info/top_level.txt
[1.030s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
[1.066s] reading manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
[1.067s] writing manifest file '../../build/camera_module/camera_module.egg-info/SOURCES.txt'
[1.071s] running build
[1.071s] running build_py
[1.071s] creating /home/jake/ros2_ws/build/camera_module/build
[1.072s] creating /home/jake/ros2_ws/build/camera_module/build/lib
[1.072s] creating /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.073s] copying ./camera_module/__init__.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.073s] copying ./camera_module/camera_module.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.073s] copying ./camera_module/threaded_node.py -> /home/jake/ros2_ws/build/camera_module/build/lib/camera_module
[1.074s] running install
[1.079s] running install_lib
[1.098s] creating /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.099s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/__init__.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.099s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/camera_module.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.099s] copying /home/jake/ros2_ws/build/camera_module/build/lib/camera_module/threaded_node.py -> /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module
[1.100s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/__init__.py to __init__.cpython-312.pyc
[1.100s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/camera_module.py to camera_module.cpython-312.pyc
[1.103s] byte-compiling /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module/threaded_node.py to threaded_node.cpython-312.pyc
[1.104s] running install_data
[1.105s] copying package.xml -> /home/jake/ros2_ws/install/camera_module/share/camera_module
[1.105s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource
[1.105s] creating /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
[1.106s] copying resource/model/RetinaFace.rknn -> /home/jake/ros2_ws/install/camera_module/share/camera_module/resource/model
[1.107s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index
[1.108s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index
[1.108s] creating /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
[1.109s] copying resource/camera_module -> /home/jake/ros2_ws/install/camera_module/share/ament_index/resource_index/packages
[1.109s] running install_egg_info
[1.129s] Copying ../../build/camera_module/camera_module.egg-info to /home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages/camera_module-0.1.0-py3.12.egg-info
[1.131s] running install_scripts
[1.252s] Installing camera_module script to /home/jake/ros2_ws/install/camera_module/bin
[1.253s] writing list of installed files to '/home/jake/ros2_ws/build/camera_module/install.log'
[1.286s] Invoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data

File diff suppressed because one or more lines are too long

View File

@ -1,216 +1,216 @@
[0.124s] colcon DEBUG Command line arguments: ['/usr/bin/colcon', 'build', '--packages-select', 'camera_module', '--event-handlers', 'console_direct+']
[0.124s] colcon DEBUG Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=24, event_handlers=['console_direct+'], ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=['camera_module'], packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0x73b477307230>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0x73b4774ae4e0>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0x73b4774ae4e0>>)
[0.161s] colcon.colcon_core.package_discovery Level 1 discover_packages(colcon_meta) check parameters
[0.161s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) check parameters
[0.161s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) check parameters
[0.162s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) check parameters
[0.162s] colcon.colcon_core.package_discovery Level 1 discover_packages(colcon_meta) discover
[0.162s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) discover
[0.162s] colcon.colcon_core.package_discovery INFO Crawling recursively for packages in '/home/jake/ros2_ws'
[0.162s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['ignore', 'ignore_ament_install']
[0.162s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'ignore'
[0.163s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'ignore_ament_install'
[0.163s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['colcon_pkg']
[0.163s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'colcon_pkg'
[0.163s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['colcon_meta']
[0.163s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'colcon_meta'
[0.163s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['ros']
[0.163s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'ros'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['cmake', 'python']
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'cmake'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'python'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['python_setup_py']
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'python_setup_py'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(build) by extensions ['ignore', 'ignore_ament_install']
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(build) by extension 'ignore'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(build) ignored
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(install) by extensions ['ignore', 'ignore_ament_install']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(install) by extension 'ignore'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(install) ignored
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(log) by extensions ['ignore', 'ignore_ament_install']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(log) by extension 'ignore'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(log) ignored
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['ignore', 'ignore_ament_install']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'ignore'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'ignore_ament_install'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['colcon_pkg']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'colcon_pkg'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['colcon_meta']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'colcon_meta'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['ros']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'ros'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['cmake', 'python']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'cmake'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'python'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['python_setup_py']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'python_setup_py'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['ignore', 'ignore_ament_install']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'ignore'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'ignore_ament_install'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['colcon_pkg']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'colcon_pkg'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['colcon_meta']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'colcon_meta'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['ros']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'ros'
[0.190s] colcon.colcon_core.package_identification DEBUG Package 'src/cam_test' with type 'ros.ament_python' and name 'cam_test'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['ignore', 'ignore_ament_install']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'ignore'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'ignore_ament_install'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['colcon_pkg']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'colcon_pkg'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['colcon_meta']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'colcon_meta'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['ros']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'ros'
[0.191s] colcon.colcon_core.package_identification DEBUG Package 'src/camera_module' with type 'ros.ament_python' and name 'camera_module'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['ignore', 'ignore_ament_install']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'ignore'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'ignore_ament_install'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['colcon_pkg']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'colcon_pkg'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['colcon_meta']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'colcon_meta'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['ros']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'ros'
[0.192s] colcon.colcon_core.package_identification DEBUG Package 'src/hello_pub' with type 'ros.ament_python' and name 'hello_pub'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'ignore'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'ignore_ament_install'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['colcon_pkg']
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'colcon_pkg'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['colcon_meta']
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'colcon_meta'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['ros']
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'ros'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['cmake', 'python']
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'cmake'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'python'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['python_setup_py']
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'python_setup_py'
[0.192s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['ignore', 'ignore_ament_install']
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'ignore'
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'ignore_ament_install'
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_pkg']
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'colcon_pkg'
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_meta']
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'colcon_meta'
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['ros']
[0.193s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'ros'
[0.194s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/cv_bridge' with type 'ros.ament_cmake' and name 'cv_bridge'
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['ignore', 'ignore_ament_install']
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'ignore'
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'ignore_ament_install'
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['colcon_pkg']
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'colcon_pkg'
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['colcon_meta']
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'colcon_meta'
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['ros']
[0.194s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'ros'
[0.195s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/image_geometry' with type 'ros.ament_cmake' and name 'image_geometry'
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['ignore', 'ignore_ament_install']
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'ignore'
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'ignore_ament_install'
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_pkg']
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'colcon_pkg'
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_meta']
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'colcon_meta'
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['ros']
[0.195s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'ros'
[0.195s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/opencv_tests' with type 'ros.ament_python' and name 'opencv_tests'
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'ignore'
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'ignore_ament_install'
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_pkg']
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'colcon_pkg'
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_meta']
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'colcon_meta'
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['ros']
[0.196s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'ros'
[0.196s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/vision_opencv' with type 'ros.ament_cmake' and name 'vision_opencv'
[0.196s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) using defaults
[0.196s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) discover
[0.196s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) using defaults
[0.196s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) discover
[0.196s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) using defaults
[0.211s] colcon.colcon_core.package_selection INFO Skipping not selected package 'cam_test' in 'src/cam_test'
[0.211s] colcon.colcon_core.package_selection INFO Skipping not selected package 'cv_bridge' in 'src/vision_opencv/cv_bridge'
[0.211s] colcon.colcon_core.package_selection INFO Skipping not selected package 'hello_pub' in 'src/hello_pub'
[0.211s] colcon.colcon_core.package_selection INFO Skipping not selected package 'image_geometry' in 'src/vision_opencv/image_geometry'
[0.211s] colcon.colcon_core.package_selection INFO Skipping not selected package 'opencv_tests' in 'src/vision_opencv/opencv_tests'
[0.211s] colcon.colcon_core.package_selection INFO Skipping not selected package 'vision_opencv' in 'src/vision_opencv/vision_opencv'
[0.212s] colcon.colcon_core.package_discovery Level 1 discover_packages(prefix_path) check parameters
[0.212s] colcon.colcon_core.package_discovery Level 1 discover_packages(prefix_path) discover
[0.214s] colcon.colcon_installed_package_information.package_discovery DEBUG Found 295 installed packages in /opt/ros/kilted
[0.216s] colcon.colcon_core.package_discovery Level 1 discover_packages(prefix_path) using defaults
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_args' from command line to 'None'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_target' from command line to 'None'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_target_skip_unavailable' from command line to 'False'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_clean_cache' from command line to 'False'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_clean_first' from command line to 'False'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_force_configure' from command line to 'False'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'ament_cmake_args' from command line to 'None'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'catkin_cmake_args' from command line to 'None'
[0.255s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'catkin_skip_building_tests' from command line to 'False'
[0.255s] colcon.colcon_core.verb DEBUG Building package 'camera_module' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/jake/ros2_ws/build/camera_module', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/jake/ros2_ws/install/camera_module', 'merge_install': False, 'path': '/home/jake/ros2_ws/src/camera_module', 'symlink_install': False, 'test_result_base': None}
[0.255s] colcon.colcon_core.executor INFO Executing jobs using 'parallel' executor
[0.256s] colcon.colcon_parallel_executor.executor.parallel DEBUG run_until_complete
[0.257s] colcon.colcon_ros.task.ament_python.build INFO Building ROS package in '/home/jake/ros2_ws/src/camera_module' with build type 'ament_python'
[0.257s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'ament_prefix_path')
[0.259s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
[0.259s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.ps1'
[0.262s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.dsv'
[0.262s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.sh'
[0.263s] colcon.colcon_core.shell INFO Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
[0.263s] colcon.colcon_core.shell DEBUG Skip shell extension 'dsv' for command environment
[0.471s] colcon.colcon_core.task.python.build INFO Building Python package in '/home/jake/ros2_ws/src/camera_module'
[0.471s] colcon.colcon_core.shell INFO Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
[0.472s] colcon.colcon_core.shell DEBUG Skip shell extension 'dsv' for command environment
[1.053s] colcon.colcon_core.event_handler.log_command DEBUG Invoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
[1.595s] colcon.colcon_core.event_handler.log_command DEBUG Invoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
[1.597s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module' for CMake module files
[1.597s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module' for CMake config files
[1.598s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/lib'
[1.598s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/bin'
[1.598s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'path')
[1.598s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.ps1'
[1.599s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.dsv'
[1.599s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.sh'
[1.600s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/lib/pkgconfig/camera_module.pc'
[1.600s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages'
[1.600s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'pythonpath')
[1.600s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.ps1'
[1.601s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.dsv'
[1.601s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.sh'
[1.601s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/bin'
[1.602s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'pythonscriptspath')
[1.602s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.ps1'
[1.602s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.dsv'
[1.602s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.sh'
[1.603s] colcon.colcon_core.environment Level 1 create_environment_scripts_only(camera_module)
[1.603s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.ps1'
[1.604s] colcon.colcon_core.shell INFO Creating package descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.dsv'
[1.604s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.sh'
[1.607s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.bash'
[1.608s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.zsh'
[1.608s] colcon.colcon_core.environment Level 1 create_file_with_runtime_dependencies(/home/jake/ros2_ws/install/camera_module/share/colcon-core/packages/camera_module)
[1.610s] colcon.colcon_parallel_executor.executor.parallel DEBUG closing loop
[1.611s] colcon.colcon_parallel_executor.executor.parallel DEBUG loop closed
[1.611s] colcon.colcon_parallel_executor.executor.parallel DEBUG run_until_complete finished with '0'
[1.612s] colcon.colcon_core.event_reactor DEBUG joining thread
[1.633s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
[1.634s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
[1.634s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
[1.634s] colcon.colcon_notification.desktop_notification INFO Sending desktop notification using 'notify2'
[1.635s] colcon.colcon_notification.desktop_notification.notify2 DEBUG Failed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
[1.635s] colcon.colcon_core.event_reactor DEBUG joined thread
[1.636s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.ps1'
[1.637s] colcon.colcon_core.shell INFO Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_ps1.py'
[1.638s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.ps1'
[1.639s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.sh'
[1.639s] colcon.colcon_core.shell INFO Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_sh.py'
[1.640s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.sh'
[1.641s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.bash'
[1.641s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.bash'
[1.642s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.zsh'
[1.643s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.zsh'
[0.119s] colcon DEBUG Command line arguments: ['/usr/bin/colcon', 'build', '--packages-select', 'camera_module', '--event-handlers', 'console_direct+']
[0.119s] colcon DEBUG Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=24, event_handlers=['console_direct+'], ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=['camera_module'], packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0x7ea789fff050>, verb_extension=<colcon_core.verb.build.BuildVerb object at 0x7ea789fa6510>, main=<bound method BuildVerb.main of <colcon_core.verb.build.BuildVerb object at 0x7ea789fa6510>>)
[0.158s] colcon.colcon_core.package_discovery Level 1 discover_packages(colcon_meta) check parameters
[0.159s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) check parameters
[0.159s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) check parameters
[0.159s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) check parameters
[0.159s] colcon.colcon_core.package_discovery Level 1 discover_packages(colcon_meta) discover
[0.159s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) discover
[0.159s] colcon.colcon_core.package_discovery INFO Crawling recursively for packages in '/home/jake/ros2_ws'
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['ignore', 'ignore_ament_install']
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'ignore'
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'ignore_ament_install'
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['colcon_pkg']
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'colcon_pkg'
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['colcon_meta']
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'colcon_meta'
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['ros']
[0.159s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'ros'
[0.181s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['cmake', 'python']
[0.181s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'cmake'
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'python'
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['python_setup_py']
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'python_setup_py'
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(build) by extensions ['ignore', 'ignore_ament_install']
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(build) by extension 'ignore'
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(build) ignored
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(install) by extensions ['ignore', 'ignore_ament_install']
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(install) by extension 'ignore'
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(install) ignored
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(log) by extensions ['ignore', 'ignore_ament_install']
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(log) by extension 'ignore'
[0.182s] colcon.colcon_core.package_identification Level 1 _identify(log) ignored
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['ignore', 'ignore_ament_install']
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'ignore'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'ignore_ament_install'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['colcon_pkg']
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'colcon_pkg'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['colcon_meta']
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'colcon_meta'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['ros']
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'ros'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['cmake', 'python']
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'cmake'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'python'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extensions ['python_setup_py']
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src) by extension 'python_setup_py'
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['ignore', 'ignore_ament_install']
[0.183s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'ignore'
[0.184s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'ignore_ament_install'
[0.184s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['colcon_pkg']
[0.184s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'colcon_pkg'
[0.184s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['colcon_meta']
[0.184s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'colcon_meta'
[0.184s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extensions ['ros']
[0.184s] colcon.colcon_core.package_identification Level 1 _identify(src/cam_test) by extension 'ros'
[0.186s] colcon.colcon_core.package_identification DEBUG Package 'src/cam_test' with type 'ros.ament_python' and name 'cam_test'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['ignore', 'ignore_ament_install']
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'ignore'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'ignore_ament_install'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['colcon_pkg']
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'colcon_pkg'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['colcon_meta']
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'colcon_meta'
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extensions ['ros']
[0.186s] colcon.colcon_core.package_identification Level 1 _identify(src/camera_module) by extension 'ros'
[0.187s] colcon.colcon_core.package_identification DEBUG Package 'src/camera_module' with type 'ros.ament_python' and name 'camera_module'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['ignore', 'ignore_ament_install']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'ignore'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'ignore_ament_install'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['colcon_pkg']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'colcon_pkg'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['colcon_meta']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'colcon_meta'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extensions ['ros']
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/hello_pub) by extension 'ros'
[0.187s] colcon.colcon_core.package_identification DEBUG Package 'src/hello_pub' with type 'ros.ament_python' and name 'hello_pub'
[0.187s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'ignore'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'ignore_ament_install'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['colcon_pkg']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'colcon_pkg'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['colcon_meta']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'colcon_meta'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['ros']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'ros'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['cmake', 'python']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'cmake'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'python'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extensions ['python_setup_py']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv) by extension 'python_setup_py'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['ignore', 'ignore_ament_install']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'ignore'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'ignore_ament_install'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_pkg']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'colcon_pkg'
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['colcon_meta']
[0.188s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'colcon_meta'
[0.189s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extensions ['ros']
[0.189s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/cv_bridge) by extension 'ros'
[0.189s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/cv_bridge' with type 'ros.ament_cmake' and name 'cv_bridge'
[0.189s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['ignore', 'ignore_ament_install']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'ignore'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'ignore_ament_install'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['colcon_pkg']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'colcon_pkg'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['colcon_meta']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'colcon_meta'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extensions ['ros']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/image_geometry) by extension 'ros'
[0.190s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/image_geometry' with type 'ros.ament_cmake' and name 'image_geometry'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['ignore', 'ignore_ament_install']
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'ignore'
[0.190s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'ignore_ament_install'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_pkg']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'colcon_pkg'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['colcon_meta']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'colcon_meta'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extensions ['ros']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/opencv_tests) by extension 'ros'
[0.191s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/opencv_tests' with type 'ros.ament_python' and name 'opencv_tests'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['ignore', 'ignore_ament_install']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'ignore'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'ignore_ament_install'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_pkg']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'colcon_pkg'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['colcon_meta']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'colcon_meta'
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extensions ['ros']
[0.191s] colcon.colcon_core.package_identification Level 1 _identify(src/vision_opencv/vision_opencv) by extension 'ros'
[0.192s] colcon.colcon_core.package_identification DEBUG Package 'src/vision_opencv/vision_opencv' with type 'ros.ament_cmake' and name 'vision_opencv'
[0.192s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) using defaults
[0.192s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) discover
[0.192s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) using defaults
[0.192s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) discover
[0.192s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) using defaults
[0.206s] colcon.colcon_core.package_selection INFO Skipping not selected package 'cam_test' in 'src/cam_test'
[0.206s] colcon.colcon_core.package_selection INFO Skipping not selected package 'cv_bridge' in 'src/vision_opencv/cv_bridge'
[0.206s] colcon.colcon_core.package_selection INFO Skipping not selected package 'hello_pub' in 'src/hello_pub'
[0.206s] colcon.colcon_core.package_selection INFO Skipping not selected package 'image_geometry' in 'src/vision_opencv/image_geometry'
[0.206s] colcon.colcon_core.package_selection INFO Skipping not selected package 'opencv_tests' in 'src/vision_opencv/opencv_tests'
[0.206s] colcon.colcon_core.package_selection INFO Skipping not selected package 'vision_opencv' in 'src/vision_opencv/vision_opencv'
[0.206s] colcon.colcon_core.package_discovery Level 1 discover_packages(prefix_path) check parameters
[0.206s] colcon.colcon_core.package_discovery Level 1 discover_packages(prefix_path) discover
[0.209s] colcon.colcon_installed_package_information.package_discovery DEBUG Found 295 installed packages in /opt/ros/kilted
[0.210s] colcon.colcon_core.package_discovery Level 1 discover_packages(prefix_path) using defaults
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_args' from command line to 'None'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_target' from command line to 'None'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_target_skip_unavailable' from command line to 'False'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_clean_cache' from command line to 'False'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_clean_first' from command line to 'False'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'cmake_force_configure' from command line to 'False'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'ament_cmake_args' from command line to 'None'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'catkin_cmake_args' from command line to 'None'
[0.248s] colcon.colcon_core.verb Level 5 set package 'camera_module' build argument 'catkin_skip_building_tests' from command line to 'False'
[0.248s] colcon.colcon_core.verb DEBUG Building package 'camera_module' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/jake/ros2_ws/build/camera_module', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/jake/ros2_ws/install/camera_module', 'merge_install': False, 'path': '/home/jake/ros2_ws/src/camera_module', 'symlink_install': False, 'test_result_base': None}
[0.248s] colcon.colcon_core.executor INFO Executing jobs using 'parallel' executor
[0.250s] colcon.colcon_parallel_executor.executor.parallel DEBUG run_until_complete
[0.250s] colcon.colcon_ros.task.ament_python.build INFO Building ROS package in '/home/jake/ros2_ws/src/camera_module' with build type 'ament_python'
[0.251s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'ament_prefix_path')
[0.253s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems
[0.253s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.ps1'
[0.256s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.dsv'
[0.256s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/ament_prefix_path.sh'
[0.257s] colcon.colcon_core.shell INFO Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
[0.257s] colcon.colcon_core.shell DEBUG Skip shell extension 'dsv' for command environment
[0.454s] colcon.colcon_core.task.python.build INFO Building Python package in '/home/jake/ros2_ws/src/camera_module'
[0.454s] colcon.colcon_core.shell INFO Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell
[0.454s] colcon.colcon_core.shell DEBUG Skip shell extension 'dsv' for command environment
[1.025s] colcon.colcon_core.event_handler.log_command DEBUG Invoking command in '/home/jake/ros2_ws/src/camera_module': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
[1.537s] colcon.colcon_core.event_handler.log_command DEBUG Invoked command in '/home/jake/ros2_ws/src/camera_module' returned '0': PYTHONPATH=/home/jake/ros2_ws/build/camera_module/prefix_override:/usr/lib/python3/dist-packages/colcon_core/task/python/colcon_distutils_commands:/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages:${PYTHONPATH} /usr/bin/python3 -W ignore:setup.py install is deprecated -W ignore:easy_install command is deprecated setup.py egg_info --egg-base ../../build/camera_module build --build-base /home/jake/ros2_ws/build/camera_module/build install --record /home/jake/ros2_ws/build/camera_module/install.log --single-version-externally-managed install_data
[1.539s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module' for CMake module files
[1.539s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module' for CMake config files
[1.540s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/lib'
[1.540s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/bin'
[1.540s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'path')
[1.540s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.ps1'
[1.541s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.dsv'
[1.541s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/path.sh'
[1.541s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/lib/pkgconfig/camera_module.pc'
[1.542s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/lib/python3.12/site-packages'
[1.542s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'pythonpath')
[1.542s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.ps1'
[1.542s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.dsv'
[1.543s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonpath.sh'
[1.543s] colcon.colcon_core.environment Level 1 checking '/home/jake/ros2_ws/install/camera_module/bin'
[1.544s] colcon.colcon_core.shell Level 1 create_environment_hook('camera_module', 'pythonscriptspath')
[1.544s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.ps1'
[1.544s] colcon.colcon_core.shell INFO Creating environment descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.dsv'
[1.544s] colcon.colcon_core.shell INFO Creating environment hook '/home/jake/ros2_ws/install/camera_module/share/camera_module/hook/pythonscriptspath.sh'
[1.545s] colcon.colcon_core.environment Level 1 create_environment_scripts_only(camera_module)
[1.545s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.ps1'
[1.546s] colcon.colcon_core.shell INFO Creating package descriptor '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.dsv'
[1.546s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.sh'
[1.547s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.bash'
[1.547s] colcon.colcon_core.shell INFO Creating package script '/home/jake/ros2_ws/install/camera_module/share/camera_module/package.zsh'
[1.548s] colcon.colcon_core.environment Level 1 create_file_with_runtime_dependencies(/home/jake/ros2_ws/install/camera_module/share/colcon-core/packages/camera_module)
[1.549s] colcon.colcon_parallel_executor.executor.parallel DEBUG closing loop
[1.550s] colcon.colcon_parallel_executor.executor.parallel DEBUG loop closed
[1.551s] colcon.colcon_parallel_executor.executor.parallel DEBUG run_until_complete finished with '0'
[1.551s] colcon.colcon_core.event_reactor DEBUG joining thread
[1.569s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_notification.desktop_notification.notify_send': Could not find 'notify-send'
[1.569s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems
[1.570s] colcon.colcon_core.plugin_system INFO Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems
[1.570s] colcon.colcon_notification.desktop_notification INFO Sending desktop notification using 'notify2'
[1.571s] colcon.colcon_notification.desktop_notification.notify2 DEBUG Failed to initialize notify2: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.Notifications was not provided by any .service files
[1.571s] colcon.colcon_core.event_reactor DEBUG joined thread
[1.572s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.ps1'
[1.573s] colcon.colcon_core.shell INFO Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_ps1.py'
[1.574s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.ps1'
[1.575s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.sh'
[1.575s] colcon.colcon_core.shell INFO Creating prefix util module '/home/jake/ros2_ws/install/_local_setup_util_sh.py'
[1.576s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.sh'
[1.576s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.bash'
[1.577s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.bash'
[1.578s] colcon.colcon_core.shell INFO Creating prefix script '/home/jake/ros2_ws/install/local_setup.zsh'
[1.578s] colcon.colcon_core.shell INFO Creating prefix chain script '/home/jake/ros2_ws/install/setup.zsh'

View File

@ -1 +1 @@
build_2025-11-09_16-50-27
build_2025-11-09_19-38-47

View File

@ -2,36 +2,46 @@ from ament_index_python.packages import get_package_share_directory
import os
import cv2
import numpy as np
from math import ceil
from itertools import product
from rknnlite.api import RKNNLite
from sensor_msgs.msg import CompressedImage
from cv_bridge import CvBridge
import time
from camera_module.threaded_node import ThreadedNode
from std_msgs.msg import String
import rclpy
from ament_index_python.packages import get_package_share_directory
import os
package_name = 'camera_module'
model_path = os.path.join(get_package_share_directory(package_name), 'resource', 'model', 'RetinaFace.rknn')
class CamPublisher(ThreadedNode):
def __init__(self):
def __init__(self, rknn, cap):
super().__init__('camera_module', default_rate=5.0)
self.string_pub = self.create_publisher(String, 'camera_module/cam_topic', 10)
self.image_pub = self.create_publisher(CompressedImage, 'camera_module/compressed', 10)
# Try multiple device indices
self.cap = None
for i in range(5):
cap = cv2.VideoCapture(i)
if cap.isOpened():
self.face_detect_pub = self.create_publisher(String, 'camera_module/face_data', 10)
self.rknn = rknn
self.cap = cap
self.get_logger().info(f'Opened webcam at index {i}')
break
self.latest_frame = None
self.latest_faces = []
self.model_size = (320, 320)
self.priors = PriorBox(self.model_size)
self.prev_time = time.time()
if self.cap is None:
self.get_logger().error('Failed to open any webcam')
# Lower resolution
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
#self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320)
#self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240)
# Faster JPEG encoding
@ -40,40 +50,172 @@ class CamPublisher(ThreadedNode):
def on_tick(self):
# Publish string message
msg = String()
msg.data = 'Cam from ROS 2!'
self.string_pub.publish(msg)
self.get_logger().info(f'Published: {msg.data}')
# msg = String()
# msg.data = 'Cam from ROS 2!'
# self.string_pub.publish(msg)
# self.get_logger().info(f'Published: {msg.data}')
# Capture and publish image
if self.cap is None:
self.get_logger().error('No webcam available')
return
ret, frame = self.cap.read()
if not ret or frame is None:
self.get_logger().error('Camera read failed')
ret, frame = cap.read()
if not ret:
return
img_height, img_width, _ = frame.shape
letterbox_img, aspect_ratio, offset_x, offset_y = letterbox_resize(frame, self.model_size, 114)
infer_img = np.expand_dims(letterbox_img.astype(np.uint8), axis=0)
outputs = rknn.inference(inputs=[infer_img])
if outputs is None:
return
try:
msg = CompressedImage()
msg.header.stamp = self.get_clock().now().to_msg()
msg.format = 'jpeg'
msg.data = cv2.imencode('.jpg', frame, [int(cv2.IMWRITE_JPEG_QUALITY), 50])[1].tobytes()
#msg.data = cv2.imencode('.jpg', frame)[1].tobytes()
self.image_pub.publish(msg)
self.get_logger().info('Published webcam frame')
except Exception as e:
self.get_logger().error(f'Failed to convert/publish image: {e}')
loc, conf, landms = outputs
boxes = box_decode(loc.squeeze(0), self.priors)
boxes *= np.array([self.model_size[1], self.model_size[0], self.model_size[1], self.model_size[0]])
boxes[:, 0::2] = np.clip((boxes[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
boxes[:, 1::2] = np.clip((boxes[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
scores = conf.squeeze(0)[:, 1]
landms = decode_landm(landms.squeeze(0), self.priors)
landms *= np.tile(np.array([self.model_size[1], self.model_size[0]]), 5)
landms[:, 0::2] = np.clip((landms[:, 0::2] - offset_x) / aspect_ratio, 0, img_width)
landms[:, 1::2] = np.clip((landms[:, 1::2] - offset_y) / aspect_ratio, 0, img_height)
inds = np.where(scores > 0.2)[0]
boxes, landms, scores = boxes[inds], landms[inds], scores[inds]
order = scores.argsort()[::-1]
boxes, landms, scores = boxes[order], landms[order], scores[order]
dets = np.hstack((boxes, scores[:, np.newaxis])).astype(np.float32)
keep = nms(dets, 0.5)
dets, landms = dets[keep], landms[keep]
face_data = []
frame_center = np.array([img_width / 2, img_height / 2])
for data, landmark in zip(dets, landms):
if data[4] < 0.6:
continue
x1, y1, x2, y2 = map(int, data[:4])
conf = data[4]
box_center = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
offset = box_center - frame_center
face_data.append({
"box": [x1, y1, x2, y2],
"confidence": float(conf),
"offset_from_center": {
"x": float(offset[0]),
"y": float(offset[1])
}
})
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
cv2.putText(frame, f'{conf:.4f}', (x1, y1 + 12), cv2.FONT_HERSHEY_DUPLEX, 0.5, (255, 255, 255))
for j in range(5):
lx, ly = map(int, landmark[j*2:j*2+2])
cv2.circle(frame, (lx, ly), 1, (0, 255, 255), 2)
# cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30),
# cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
if len(face_data) > 0:
print(face_data)
self.face_detect_pub.publish(String(data=str(face_data)))
ret, buffer = cv2.imencode('.jpg', frame)
if ret:
latest_frame = buffer.tobytes()
latest_faces = face_data
def destroy_node(self):
if self.cap:
self.cap.release()
super().destroy_node()
# --- RetinaFace Utilities ---
def letterbox_resize(image, size, bg_color):
target_width, target_height = size
image_height, image_width, _ = image.shape
aspect_ratio = min(target_width / image_width, target_height / image_height)
new_width = int(image_width * aspect_ratio)
new_height = int(image_height * aspect_ratio)
image = cv2.resize(image, (new_width, new_height), interpolation=cv2.INTER_AREA)
result_image = np.ones((target_height, target_width, 3), dtype=np.uint8) * bg_color
offset_x = (target_width - new_width) // 2
offset_y = (target_height - new_height) // 2
result_image[offset_y:offset_y + new_height, offset_x:offset_x + new_width] = image
return result_image, aspect_ratio, offset_x, offset_y
def PriorBox(image_size):
anchors = []
min_sizes = [[16, 32], [64, 128], [256, 512]]
steps = [8, 16, 32]
feature_maps = [[ceil(image_size[0] / step), ceil(image_size[1] / step)] for step in steps]
for k, f in enumerate(feature_maps):
min_sizes_ = min_sizes[k]
for i, j in product(range(f[0]), range(f[1])):
for min_size in min_sizes_:
s_kx = min_size / image_size[1]
s_ky = min_size / image_size[0]
dense_cx = [x * steps[k] / image_size[1] for x in [j + 0.5]]
dense_cy = [y * steps[k] / image_size[0] for y in [i + 0.5]]
for cy, cx in product(dense_cy, dense_cx):
anchors += [cx, cy, s_kx, s_ky]
return np.array(anchors).reshape(-1, 4)
def box_decode(loc, priors):
variances = [0.1, 0.2]
boxes = np.concatenate((
priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:],
priors[:, 2:] * np.exp(loc[:, 2:] * variances[1])), axis=1)
boxes[:, :2] -= boxes[:, 2:] / 2
boxes[:, 2:] += boxes[:, :2]
return boxes
def decode_landm(pre, priors):
variances = [0.1, 0.2]
landmarks = np.concatenate((
priors[:, :2] + pre[:, 0:2] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 2:4] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 4:6] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 6:8] * variances[0] * priors[:, 2:],
priors[:, :2] + pre[:, 8:10] * variances[0] * priors[:, 2:]
), axis=1)
return landmarks
def nms(dets, thresh):
x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4]
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
order = scores.argsort()[::-1]
keep = []
while order.size > 0:
i = order[0]
keep.append(i)
xx1 = np.maximum(x1[i], x1[order[1:]])
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])
w = np.maximum(0.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
inter = w * h
ovr = inter / (areas[i] + areas[order[1:]] - inter)
inds = np.where(ovr <= thresh)[0]
order = order[inds + 1]
return keep
# --- RKNN Initialization ---
rknn = RKNNLite()
rknn.load_rknn(model_path)
rknn.init_runtime()
# --- Shared State ---
latest_frame = None
latest_faces = []
cap = cv2.VideoCapture(0)
def main():
rclpy.init()
node = CamPublisher()
node = CamPublisher(rknn, cap)
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()