script_http_server.cpp
Go to the documentation of this file.
1 #include <chrono>
2 #include <iostream>
3 #include <thread>
4 
5 // Includes common necessary includes for development using depthai library
6 #include "depthai/depthai.hpp"
7 
8 int main() {
9  using namespace std;
10 
11  // Start defining a pipeline
12  dai::Pipeline pipeline;
13 
14  auto cam = pipeline.create<dai::node::ColorCamera>();
15 
16  auto jpeg = pipeline.create<dai::node::VideoEncoder>();
17  jpeg->setDefaultProfilePreset(cam->getFps(), dai::VideoEncoderProperties::Profile::MJPEG);
18 
19  // Script node
20  auto script = pipeline.create<dai::node::Script>();
22  script->setScript(R"(
23  from http.server import BaseHTTPRequestHandler
24  import socketserver
25  import socket
26  import fcntl
27  import struct
28 
29  PORT = 8080
30  ctrl = CameraControl()
31  ctrl.setCaptureStill(True)
32 
33  def get_ip_address(ifname):
34  s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
35  return socket.inet_ntoa(fcntl.ioctl(
36  s.fileno(),
37  -1071617759, # SIOCGIFADDR
38  struct.pack('256s', ifname[:15].encode())
39  )[20:24])
40 
41  class HTTPHandler(BaseHTTPRequestHandler):
42  def do_GET(self):
43  if self.path == '/':
44  self.send_response(200)
45  self.end_headers()
46  self.wfile.write(b'<h1>[DepthAI] Hello, world!</h1><p>Click <a href="img">here</a> for an image</p>')
47  elif self.path == '/img':
48  node.io['out'].send(ctrl)
49  jpegImage = node.io['jpeg'].get()
50  self.send_response(200)
51  self.send_header('Content-Type', 'image/jpeg')
52  self.send_header('Content-Length', str(len(jpegImage.getData())))
53  self.end_headers()
54  self.wfile.write(jpegImage.getData())
55  else:
56  self.send_response(404)
57  self.end_headers()
58  self.wfile.write(b'Url not found...')
59 
60  with socketserver.TCPServer(("", PORT), HTTPHandler) as httpd:
61  node.warn(f"Serving at {get_ip_address('re0')}:{PORT}")
62  httpd.serve_forever()
63  )");
64 
65  cam->still.link(jpeg->input);
66  script->outputs["out"].link(cam->inputControl);
67  jpeg->bitstream.link(script->inputs["jpeg"]);
68 
69  // Connect to device with pipeline
70  dai::Device device(pipeline);
71  while(!device.isClosed()) {
72  this_thread::sleep_for(chrono::milliseconds(1000));
73  }
74  return 0;
75 }
dai::DeviceBase::isClosed
bool isClosed() const
Definition: DeviceBase.cpp:627
dai::Pipeline
Represents the pipeline, set of nodes and connections between them.
Definition: Pipeline.hpp:100
dai::node::ColorCamera
ColorCamera node. For use with color sensors.
Definition: ColorCamera.hpp:16
dai::VideoEncoderProperties::Profile::MJPEG
@ MJPEG
depthai.hpp
dai::Pipeline::create
std::shared_ptr< N > create()
Definition: Pipeline.hpp:145
dai::ProcessorType::LEON_CSS
@ LEON_CSS
dai::node::Script
Definition: Script.hpp:15
main
int main()
Definition: script_http_server.cpp:8
dai::node::Script::setProcessor
void setProcessor(ProcessorType type)
Definition: Script.cpp:53
dai::Device
Definition: Device.hpp:21
std
Definition: Node.hpp:366
dai::node::VideoEncoder
VideoEncoder node. Encodes frames into MJPEG, H264 or H265.
Definition: VideoEncoder.hpp:14


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19