YOLO Object Detection, Nenačte se signál z webkamery – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

YOLO Object Detection, Nenačte se signál z webkamery – C / C++ – Fórum – Programujte.comYOLO Object Detection, Nenačte se signál z webkamery – C / C++ – Fórum – Programujte.com

 

Kevil0
Návštěvník
18. 10. 2018   #1
-
0
-

Na svém notebooku s W10, OpenCV 3.4.0, CUDA & CDNN a Visual Studio 2017 jsem si stáhl repozitář projektu YOLO v2 a úspěšně ho zkompiloval. Vše funguje jak má vč. rozpoznání objektů v demo videu:

darknet.exe detector demo data/voc.data yolo-voc.cfg yolo-voc.weights test.mp4 -i 0

Nechápu, proč se mi nedaří použí místo videa signál webcamery z notebooku:

darknet.exe detector demo data/voc.data yolo-voc.cfg yolo-voc.weights

U web kamery se na zlomek sekundy rozsvítí LEDka, že kamera naběhla, ale program vzápětí skončí s hláškou "Stream closed.: No error". Hláška je vidět v části demo.c viz níže

#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/core/version.hpp"
#ifndef CV_VERSION_EPOCH
#include "opencv2/videoio/videoio_c.h"
#endif
image get_image_from_stream(CvCapture *cap);

static char **demo_names;
static image **demo_alphabet;
static int demo_classes;

static float **probs;
static box *boxes;
static network net;
static image in   ;
static image in_s ;
static image det  ;
static image det_s;
static image disp = {0};
static CvCapture * cap;
static float fps = 0;
static float demo_thresh = 0;

static float *predictions[FRAMES];
static int demo_index = 0;
static image images[FRAMES];
static IplImage* ipl_images[FRAMES];
static float *avg;

void draw_detections_cv(IplImage* show_img, int num, float thresh, box *boxes, float **probs, char **names, image **alphabet, int classes);
image get_image_from_stream_resize(CvCapture *cap, int w, int h, IplImage** in_img);
IplImage* in_img;
IplImage* det_img;
IplImage* show_img;

void *fetch_in_thread(void *ptr)
{
    //in = get_image_from_stream(cap);
	in = get_image_from_stream_resize(cap, net.w, net.h, &in_img);
    if(!in.data){
        error("Stream closed.");
    }
    //in_s = resize_image(in, net.w, net.h);
	in_s = make_image(in.w, in.h, in.c);
	memcpy(in_s.data, in.data, in.h*in.w*in.c*sizeof(float));
	
    return 0;
}

Web kamera přitom v jiném projektu s krátkým kódem funguje v pohodě:

#include "opencv2/opencv.hpp"

using namespace cv;

int main(int, char**)
{
	VideoCapture cap(0); // open the default camera
	if (!cap.isOpened())  // check if we succeeded
		return -1;

	Mat edges;
	namedWindow("edges", 1);
	for (;;)
	{
		Mat frame;
		cap >> frame; // get a new frame from camera
		cvtColor(frame, edges, CV_BGR2GRAY);
		GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
		Canny(edges, edges, 0, 30, 3);
		imshow("edges", edges);
		if (waitKey(30) >= 0) break;
	}
	// the camera will be deinitialized automatically in VideoCapture destructor
	return 0;
}

Netušíte někdo, v čem může být problém ?

Nahlásit jako SPAM
IP: 89.177.163.–
JerryM0
Věrný člen
19. 10. 2018   #2
-
0
-

#1 Kevil
a napadlo tě zeptat se tvůrce toho programu ? nebo připojit externí WEBku ? 

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:c0aa:a7d1:7acc:1f66...–
Kevil0
Návštěvník
20. 10. 2018   #3
-
0
-

#2 JerryM
Napadlo, ale nevěděl jsem, jak mu to poslat. Už jsem mu dotaz poslal.

Nahlásit jako SPAM
IP: 89.177.163.–
Kevil0
Návštěvník
20. 10. 2018   #4
-
0
-

V modulu cuda.h mi to hlásí varování na řádku:

dim3 cuda_gridsize(size_t n);

warning C4190: cuda_gridsize má zadanou funkci C-linkage, ale vrací UDT dim3 nekompatibilní s jazykem C

Ve vectors_types.h je definováno:

struct __device_builtin__ dim3
{
    unsigned int x, y, z;
#if defined(__cplusplus)
    __host__ __device__ dim3(unsigned int vx = 1, unsigned int vy = 1, unsigned int vz = 1) : x(vx), y(vy), z(vz) {}
    __host__ __device__ dim3(uint3 v) : x(v.x), y(v.y), z(v.z) {}
    __host__ __device__ operator uint3(void) { uint3 t; t.x = x; t.y = y; t.z = z; return t; }
#endif /* __cplusplus */
};

typedef __device_builtin__ struct dim3 dim3;

V čem je problém ?

Nahlásit jako SPAM
IP: 89.177.163.–
JerryM0
Věrný člen
21. 10. 2018   #5
-
0
-

#4 Kevil
tady to je popsaný 

https://stackoverflow.com/questions/22901697/error-in-c-code-linkage-warning-c4190-type-has-c-linkage-specified-but-retu

je to čistě záležitost verze kompilátoru C++ třeba MS nebo GCC apod. 

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:7844:301d:af98:1559...–
Kevil0
Návštěvník
21. 10. 2018   #6
-
0
-

#5 JerryM
Díky, nejsem z toho ale moc chytrej. Myslím, že to není potřeba nějak řešit. Sestavující program při kompilaci nevidí definici konstrukturu, který je definována v jiném souboru, ve finále by ale mělo být vše v pohodě.

Nahlásit jako SPAM
IP: 89.177.163.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Podobná vlákna

YOLO Object Detection — založil Kevil

Připojení webkamery — založil dude

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý