Я пытаюсь создать сценарий CGI, который сделает снимок и сохранит его в том месте, которое я ему даю. Я использую малиновый Pi и модуль камеры Pi с драйвером uv4l. Я также решил использовать Apache2.
В настоящее время скрипт работает без ошибок и ошибок в журнале ошибок Apache, но изображение не сохраняется. Камера открыта, потому что на ней появляется красный свет. Я также проверяю, нет ли изображения пустым, которого нет.
До сих пор я пытался изменить права доступа к папкам, чтобы пользователь pi владел всем. Я также попытался сохранить уже существующий файл, но он никогда не обновляется. Я никогда не использовал сценарии Apache2 или CGI, прежде чем я чувствую, что проблема в нем, но я не совсем уверен, что искать, потому что у меня нет ошибок. Любые предложения будут ценны.
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char** argv){
cv::VideoCapture cap(-1);
if (!cap.isOpened()){
cout << "Content-type:text/html\r\n\r\n";
cout << "<html>";
cout << "<h1> Camera didn't open </h1>";
cout << "</html>";
return -1;
}
//cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
//cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
int count = 40;
cv::Mat frame;
bool bSuccess = cap.read(frame);
while (count != 0){
count--;
}
if (!bSuccess){
cout << "Content-type:text/html\r\n\r\n";
cout << "<html>";
cout << "<h1> Photo did't work get read in</h1>";
cout << "</html>";
return 0;
}
cout << "Content-type:text/html\r\n\r\n";
cout << "<html>";
cout << "<h1> Photo Taken + Saved</h1>";
cout << "</html>";
cv::imwrite("/var/www/photos/Current.png", frame);
return 0;
}
Я использую эту команду для компиляции:
g++ -lopencv_core -lopencv_highgui -L/usr/lib/uv4l/uv4lext/armv6l -luv4lext -Wl,- rpath,'/usr/lib/uv4l/uv4lext/armv6l' time.cpp -o test_script.cgi
Я исправил свою проблему. Метод imwrite() сохранял уже существующее изображение без разрешения на запись.