一、系统信息
Code: Select all
inux luckfox 5.10.160 #2 Thu May 15 20:31:40 CST 2025 armv7l GNU/Linux
Luckfox Pico Ultra W
摄像头为sc3336,opencv-mobile版本为opencv-mobile-4.12.0-luckfox-pico
1、拍照时所用库cmake内容为:
Code: Select all
project(ColorComparison)
cmake_minimum_required(VERSION 3.5)
set(CMAKE_CXX_STANDARD 11)
SET(CMAKE_C_COMPILER "/home/lab307/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-gcc")
SET(CMAKE_CXX_COMPILER "/home/lab307/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-g++")
set(OpenCV_DIR ${CMAKE_CURRENT_SOURCE_DIR}/opencv-mobile-4.12.0-luckfox-pico/lib/cmake/opencv4)
# 查找OpenCV(仅库内部使用)
find_package(OpenCV REQUIRED)
link_directories(${OpenCV_INCLUDE_DIRS})
# 编译动态库
add_library(PictureCap SHARED
../src/PictureCap.cpp
)
# 私有链接OpenCV(不暴露给使用者)
target_include_directories(PictureCap
PRIVATE
${OpenCV_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/../include
)
target_link_libraries(PictureCap PRIVATE ${OpenCV_LIBS})
# 设置动态库输出名称(可选)
set_target_properties(PictureCap PROPERTIES OUTPUT_NAME "PictureCap")
Code: Select all
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <unistd.h> // sleep()
int PictureCap()
{
cv::VideoCapture cap;
cv::Mat tmp;
cv::Mat bgr;
int result = -1;
//const int target_width = 2304;
//const int target_height = 1296;
try{
const int target_width = 1920;
const int target_height = 1080;
cap.set(cv::CAP_PROP_FRAME_WIDTH, target_width);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, target_height);
cap.open(0);
if(!cap.isOpened()){
fprintf(stderr, "ERROR:Camera open failed!");
result = 1;
return result;
}
const int w = cap.get(cv::CAP_PROP_FRAME_WIDTH);
const int h = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
fprintf(stderr, "%d x %d\n", w, h);
//跳过无效帧
for(int i = 0;i < 5;i++){
cap >> tmp;
usleep(100000);//100ms
}
sleep(1);
bool captureSuccess = false;
int number = 0;
const int MAX_NUMBERS = 10;
while(number++ < MAX_NUMBERS){
cap >> bgr;
if(!bgr.empty() ){
captureSuccess = true;
break;
}
sleep(1);//1s
}
cap.release();
if(captureSuccess){
if(cv::imwrite("/userdata/local/out.jpg", bgr)){
fprintf(stderr, "Capture success! Capture number:%d ",number);
result = 0;
}else{
fprintf(stderr, "ERROR:Image save failed!");
result = 3;
}
}else{
fprintf(stderr, "ERROR:Capture timout! Capture number:%d",number);
result = 2;
}
}
catch(const cv::Exception& e){
fprintf(stderr, "OpenCV:Exception:%d",e.what());
}
catch(const std::exception& e){
fprintf(stderr, "Std:Exception:%d",e.what());
}
catch(...){
fprintf(stderr, "Unknow exception occurred!");
}
return result;
拍摄正常时输出信息为:
Code: Select all
devpath = /dev/video11
driver = rkisp_v7
card = rkisp_mainpath
bus_info = platform:rkisp-vir0
version = 20500
capabilities = 84201000
device_caps = 4201000
fmt = UYVY 4:2:2 59565955
fmt = Y/CbCr 4:2:2 3631564e
fmt = Y/CrCb 4:2:2 3136564e
fmt = Y/CrCb 4:2:0 3132564e
size = 32 x 32 ~ 2304 x 1296 (+8 +8)
fmt = Y/CbCr 4:2:0 3231564e
fmt = Y/CrCb 4:2:0 (N-C) 31324d4e
fmt = Y/CbCr 4:2:0 (N-C) 32314d4e
XCORE:K:rk_aiq_uapi_sysctl_preInit_devBufCnt: dev_ent:rkraw_rx, buf_cnt:2
XCORE:K:rk_aiq_uapi_sysctl_preInit_scene: main_scene: normal, sub_scene: day
IPCSERVER:K:cid[0] Process path:/tmp/UNIX.domain0, sockfd:28
XCORE:K:cid[0] rk_aiq_uapi_sysctl_init success. iq:/oem/usr/share/iqfiles/sc3336_CMK-OT2119-PC1_30IRC-F16.json
XCORE:K:cid[0] rk_aiq_uapi_sysctl_prepare success. mode:0
/dev/video11 does not support changing fps
CAMHW:K:cid[0] start success. isGroup:0, isOnline:1, isMultiIsp:0, init_ens:0x1bfc0ffc4739
XCORE:K:cid[0] rk_aiq_uapi_sysctl_start success.
CAMHW:K:camId:0, notify_isp_stream_status on
1920 x 1080
CAMHW:K:camId:0, notify_isp_stream_status off
XCORE:K:cid[0] rk_aiq_uapi_sysctl_stop success.
MessageParser process loop exit!
IPCSERVER:K:cid[0] Deinit success
XCORE:K:cid[0] rk_aiq_uapi_sysctl_deinit_locked success.
mpp[3306]: mpp_buffer: mpi_buf_id = 173, dma_buf_fd = 17
mpp[3306]: mpp: mClientFd 19 open ok attr.chan_id 0
Code: Select all
devpath = /dev/video11
driver = rkisp_v7
card = rkisp_mainpath
bus_info = platform:rkisp-vir0
version = 20500
capabilities = 84201000
device_caps = 4201000
fmt = UYVY 4:2:2 59565955
fmt = Y/CbCr 4:2:2 3631564e
fmt = Y/CrCb 4:2:2 3136564e
fmt = Y/CrCb 4:2:0 3132564e
size = 32 x 32 ~ 2304 x 1296 (+8 +8)
fmt = Y/CbCr 4:2:0 3231564e
fmt = Y/CrCb 4:2:0 (N-C) 31324d4e
fmt = Y/CbCr 4:2:0 (N-C) 32314d4e
XCORE:K:rk_aiq_uapi_sysctl_preInit_devBufCnt: dev_ent:rkraw_rx, buf_cnt:2
XCORE:K:rk_aiq_uapi_sysctl_preInit_scene: main_scene: normal, sub_scene: day
IPCSERVER:K:cid[0] Process path:/tmp/UNIX.domain0, sockfd:27
XCORE:K:cid[0] rk_aiq_uapi_sysctl_init success. iq:/oem/usr/share/iqfiles/sc3336_CMK-OT2119-PC1_30IRC-F16.json
XCORE:K:cid[0] rk_aiq_uapi_sysctl_prepare success. mode:0
/dev/video11 does not support changing fps
CAMHW:K:cid[0] start success. isGroup:0, isOnline:1, isMultiIsp:0, init_ens:0x1bfc0ffc4739
XCORE:K:cid[0] rk_aiq_uapi_sysctl_start success.
CAMHW:K:camId:0, notify_isp_stream_status on
1920 x 1080
select /dev/video11 timeout
select /dev/video11 timeout
select /dev/video11 timeout
select /dev/video11 timeout
select /dev/video11 timeout
select /dev/video11 timeout
CAMHW:K:camId:0, notify_isp_stream_status off
XCORE:K:cid[0] rk_aiq_uapi_sysctl_stop success.
MessageParser process loop exit!
IPCSERVER:K:cid[0] Deinit success
XCORE:K:cid[0] rk_aiq_uapi_sysctl_deinit_locked success.
mpp[3306]: mpp_buffer: mpi_buf_id = 173, dma_buf_fd = 15
mpp[3306]: mpp: mClientFd 17 open ok attr.chan_id 0
fopen /userdata/local/out.jpg failed
Code: Select all
--> [Manager] Initializing RKNN context and memory...
E RKNN: failed to allocate fd, ret: -1, errno: 12, errstr: Cannot allocate memory
E RKNN: failed to allocate model memory!, size: 28849856, flags: #2
rknn_init 失败! ret=-1
Code: Select all
[root@luckfox root]# top
'vt102': unknown terminal type.
[root@luckfox root]# top
'vt102': unknown terminal type.
[root@luckfox root]# free -h
total used free shared buff/cache available
Mem: 171Mi 48Mi 36Mi 0.0Ki 85Mi 115Mi
Swap: 0B 0B 0B

