summaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-01-23 12:08:26 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-01-23 12:08:26 +0100
commit3fa8f19daf8b36b0703002d78a84e5bb7919849b (patch)
treea82c63aac3b415cb5eddba58ba610213e85f9ae1 /main.cpp
parent38acf876313c9bf28e41acd8bc29d6115c1e9285 (diff)
add support of inno-maker ov9281
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp186
1 files changed, 111 insertions, 75 deletions
diff --git a/main.cpp b/main.cpp
index 341693e..481d6f1 100644
--- a/main.cpp
+++ b/main.cpp
@@ -9,6 +9,7 @@
#include "LibCamera.h"
#include "calibration.h"
+#include "camera/innomakerov9281.h"
#include "camera/ov9281.h"
#include "dumps.h"
#include "fuck_intel.h"
@@ -52,7 +53,7 @@ extern volatile int32_t positionSteps;
requested_params_t requested_params;
namespace {
-Image img;
+std::shared_ptr<Image> img;
Pixels pixels;
std::vector<Pixels> calibrationPixels;
QMutex calibrationPixelsMutex;
@@ -87,42 +88,73 @@ auto printPixels = [](const auto& pixels) {
std::cout << std::endl;
};
+void onNewImage(
+ std::shared_ptr<Image> image)
+{
+ if (!image) {
+ qDebug() << __func__ << "no image";
+ return;
+ }
+
+ ::img = image;
+}
+
void onNewPixels(
std::shared_ptr<Pixels> pixels)
{
+ if (!pixels) {
+ qDebug() << __func__ << "got null pixels";
+ }
+
if (!*pixels) {
- qDebug() << "got empty pixels";
+ // qDebug() << __func__ << "got empty pixels";
}
::pixels = *pixels;
-
- if (!::pixels) {
- qDebug() << "empty pixels after copy";
- }
}
bool initLaser();
-int main(
- int argc, char* argv[])
+int main(int argc, char* argv[])
{
QCoreApplication app(argc, argv);
+ {
+ std::cout << std::boolalpha;
+ InnoMakerOV9281 innoMakerCam;
+ qDebug() << "init:" << innoMakerCam.init();
+ qDebug() << "set exposure:" << innoMakerCam.setExposureTimeMs(3000);
+ qDebug() << "set gain:" << innoMakerCam.setGain(3000);
+
+ Image buf;
+
+ for (size_t i = 0; i < 1000; ++i) {
+ if (!innoMakerCam.getImage(buf)) {
+ break;
+ }
+
+ buf.rotate();
+ auto pixels = buf.pixels();
+ }
+ }
+ qDebug() << "ok";
+ exit(EXIT_SUCCESS);
+
// if (false)
qDebug() << "size of raw profile" << sizeof(Pixels);
- if (true) {
+ if (false) {
// open binary calibration table
- if (false) {
+ if (true) {
if (!openCalibrationTable("/home/user/dumps/binz.calibration_table",
::calibrationTableZ)) {
exit(EXIT_FAILURE);
}
- interpolate(::calibrationTableZ);
+ // interpolate(::calibrationTableZ);
if (!openCalibrationTable("/home/user/dumps/binx.calibration_table",
::calibrationTableX)) {
exit(EXIT_FAILURE);
}
- interpolate(::calibrationTableX);
+ // interpolate(::calibrationTableX);
}
if (false) {
@@ -200,84 +232,82 @@ int main(
// .save("/home/user/dumps/imageX_interpolated.png");
}
- if (true) {
- auto rawProfiles = openDump("/home/user/dumps/binz");
- // auto rawProfiles = openDump("/home/user/dumps/z");
- qDebug() << "raw z-profiles count is" << rawProfiles.size();
- // qDebug() << "height" << calibrationColumnHeight;
+ // load binary calibration dumps and calibrate
+ if (false) {
+ if (true) {
+ auto rawProfiles = openDump("/home/user/dumps/binz");
+ // auto rawProfiles = openDump("/home/user/dumps/z");
+ qDebug() << "raw z-profiles count is" << rawProfiles.size();
+ // qDebug() << "height" << calibrationColumnHeight;
- auto filteredRawProfiles = filter(std::move(rawProfiles));
- qDebug() << "filtered z-profiles count is"
- << filteredRawProfiles.count();
+ auto filteredRawProfiles = filter(std::move(rawProfiles));
+ qDebug() << "filtered z-profiles count is"
+ << filteredRawProfiles.count();
- ::calibrationTableZ = calibrateZ(std::move(filteredRawProfiles),
- requested_params.stepsPerMm);
- // if (!dump(
- // ::calibrationTableZ,
- // "/home/user/dumps/binz.calibration_table"
- // ))
- // {
- // qApp->exit(EXIT_FAILURE);
- // }
+ ::calibrationTableZ = calibrateZ(std::move(filteredRawProfiles),
+ requested_params.stepsPerMm);
- // bool ok = calibrationTableToImage(::calibrationTableZ)
- // .save("/home/user/dumps/z/imageZ.png");
+ // bool ok = calibrationTableToImage(::calibrationTableZ)
+ // .save("/home/user/dumps/z/imageZ.png");
- // if (!ok)
- // {
- // qDebug() << "cannot save imageZ.png";
- // exit(EXIT_FAILURE);
- // }
+ // if (!ok)
+ // {
+ // qDebug() << "cannot save imageZ.png";
+ // exit(EXIT_FAILURE);
+ // }
- interpolate(::calibrationTableZ);
+ interpolate(::calibrationTableZ);
- // calibrationTableToImage(::calibrationTableZ)
- // .save("/home/user/dumps/z/imageZ_interpolated.png");
- // exit(EXIT_SUCCESS);
- }
+ if (!dump(::calibrationTableZ,
+ "/home/user/dumps/binz.calibration_table")) {
+ qApp->exit(EXIT_FAILURE);
+ }
+ // calibrationTableToImage(::calibrationTableZ)
+ // .save("/home/user/dumps/z/imageZ_interpolated.png");
+ // exit(EXIT_SUCCESS);
+ }
- qDebug() << "--------------------------------------------------------";
+ qDebug()
+ << "--------------------------------------------------------";
- if (true) {
- auto rawProfiles = openDump("/home/user/dumps/binx");
- qDebug() << "raw x-profiles count is" << rawProfiles.size();
- // qDebug() << "height" << calibrationColumnHeight;
+ if (true) {
+ auto rawProfiles = openDump("/home/user/dumps/binx");
+ qDebug() << "raw x-profiles count is" << rawProfiles.size();
+ // qDebug() << "height" << calibrationColumnHeight;
- auto filteredRawProfiles = filter(std::move(rawProfiles));
- qDebug() << "filtered x-profiles count is"
- << filteredRawProfiles.count();
+ auto filteredRawProfiles = filter(std::move(rawProfiles));
+ qDebug() << "filtered x-profiles count is"
+ << filteredRawProfiles.count();
- ::calibrationTableX = calibrateX(std::move(filteredRawProfiles));
+ ::calibrationTableX = calibrateX(std::move(filteredRawProfiles));
- // if (!dump(
- // ::calibrationTableZ,
- // "/home/user/dumps/binx.calibration_table"
- // ))
- // {
- // qApp->exit(EXIT_FAILURE);
- // }
+ // bool ok = calibrationTableToImage(::calibrationTableX)
+ // .save("/home/user/dumps/z/imageX.png");
- // bool ok = calibrationTableToImage(::calibrationTableX)
- // .save("/home/user/dumps/z/imageX.png");
+ // if (!ok)
+ // {
+ // qDebug() << "cannot save imageX.png";
+ // exit(EXIT_FAILURE);
+ // }
- // if (!ok)
- // {
- // qDebug() << "cannot save imageX.png";
- // exit(EXIT_FAILURE);
- // }
+ interpolate(::calibrationTableX);
- interpolate(::calibrationTableX);
+ if (!dump(::calibrationTableZ,
+ "/home/user/dumps/binx.calibration_table")) {
+ qApp->exit(EXIT_FAILURE);
+ }
- // calibrationTableToImage(::calibrationTableX)
- // .save("/home/user/dumps/z/imageX_interpolated.png");
+ // calibrationTableToImage(::calibrationTableX)
+ // .save("/home/user/dumps/z/imageX_interpolated.png");
+ }
}
}
// exit(EXIT_SUCCESS);
- if (!initLaser()) {
- return EXIT_FAILURE;
- }
+ // if (!initLaser()) {
+ // return EXIT_FAILURE;
+ // }
// PrinterClient printerClient;
@@ -310,6 +340,7 @@ int main(
camera->printControls();
camera->newPixels.connect(&onNewPixels);
+ camera->newImage.connect(&onNewImage);
if (!camera->startStream()) {
cm->stop();
@@ -319,15 +350,19 @@ int main(
QHttpServer qHttpServer;
qHttpServer.route("/v1/sensor/image", [&]() {
- std::cout << "http: image" << std::endl;
+ std::cout << "http: image" << std::endl << std::flush;
+ pgm_save(::img);
std::lock_guard<std::mutex> lg(pgm_image_mtx);
- // qDebug() << "image";
+ qDebug() << "mutex locked";
+ qDebug() << "image saved to array";
return QByteArray((const char*) pgm_image, pgm_image_size);
});
qHttpServer.route("/v1/sensor/image2", [&]() {
std::cout << "http: image2" << std::endl;
+ pgm_save(::img);
+
std::lock_guard<std::mutex> lg(pgm_image_mtx);
- // qDebug() << "image";
+ qDebug() << "image2";
return QByteArray((const char*) pgm_image, pgm_image_size);
});
// qHttpServer.route("/v1/sensor/exposureTimeUs", [&]() {
@@ -348,8 +383,9 @@ int main(
QJsonObject json;
json["pixels"] = pixels;
json["encoderPosition"] = qint64{encoder.position()};
- json["measurementCounter"] = qint64{img.counters.measurementCounter};
- json["timestampUs"] = qint64(img.counters.timestampUs);
+ // FIXME: get prom pixels struct
+ json["measurementCounter"] = qint64{img->counters.measurementCounter};
+ json["timestampUs"] = qint64(img->counters.timestampUs);
const auto lines = pixelsToLines(::pixels);