The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Подключаем Genius VideoCAM Look. (hardware linux)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: hardware, linux,  (найти похожие документы)
From: kav <kav@uriit.ru.> Newsgroups: email Date: Mon, 5 Oct 2006 14:31:37 +0000 (UTC) Subject: Подключаем Genius VideoCAM Look. В связи с тем что в сети не было найдено софта который бы корректно работал с данной web-камерой была предпринята попытка всё таки опубликовать данные с камеры в WEB. Имеем: web-камеру на чипе sn9c10х (VideoCAM Look) fedore core 5 c штатным ядром 2.6.16_2080 Необходимо осуществить захват и опубликовать изображение с камеры в WEB Подготовка: 1)скачиваем с сети обновленную версию драйвера sn9c102 (в моём случае это 1.32, как показала практика штатный драйвер более низкой верии работает с камерой не совсем корректно) 2)скачиваем программку sn-webcam (из нее нам потребуются алгоритмы декомпрессии Хафмана и Байера rggb) На этом подготовка завершена. Этап 1 ------ Установка более новой версии драйвера Распаковываем файл с исходными текстами драйвера и выполняем в каталоге, в котором лежит Makefile команду: make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` Далее копируем полученный модуль драйвера поверх старого и выполняем команду moddep. Теперь подключаем камеру к компьютеру и видим в dmesg что найдена камера и файл устройства для нее /dev/video0 На этом установка нового драйвера завершена. Этап 2 ------ Пишем программку которая будет осуществлять захват картинки и отправлять ее по фтп на web-сервер. 1)Создаём каталог в котором будет собираться и запускаться наша программа и далее работаем с ним. 2)Создаём Makefile: capt: capt.c gcc -ljpeg capt.c sonix_compress.c bayer.c -o capt 3)Создаём файлик capt.c: #include <sys/time.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sys/mman.h> #include <errno.h> /* These are needed to use the Videum driver */ #include <linux/fs.h> #include <linux/kernel.h> #include <linux/videodev.h> /* Video for Linux Two */ #include <jpeglib.h> int main(int argc,char** argv){ struct v4l2_capability cap; struct v4l2_fmtdesc fmt; int vid=open("/dev/video0",O_RDONLY); if(vid<0){ printf("Cant open device\n"); exit(1); } int err=ioctl(vid,VIDIOC_QUERYCAP, &cap); if(err){ printf("error getting capabilities\n"); exit(1); } if(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE){ printf("We can capture\n"); } if(cap.capabilities & V4L2_CAP_READWRITE){ printf("We can read\n"); } int x=640; int y=480; struct v4l2_format format; format.type=V4L2_BUF_TYPE_VIDEO_CAPTURE; format.fmt.pix.width=x; format.fmt.pix.height=y; format.fmt.pix.pixelformat=V4L2_PIX_FMT_SN9C10X; struct v4l2_cropcap cropcap; cropcap.type=V4L2_BUF_TYPE_VIDEO_CAPTURE; err=ioctl(vid,VIDIOC_CROPCAP,&cropcap); if(err){ printf("error getting cropcap\n"); exit(1); } struct v4l2_crop crop; crop.type=V4L2_BUF_TYPE_VIDEO_CAPTURE; crop.c.top=0; crop.c.left=0; crop.c.width=x*24; crop.c.height=y*24; err=ioctl(vid,VIDIOC_S_CROP,&crop); if(err){ printf("error setting crop\n"); exit(1); } err=ioctl(vid,VIDIOC_S_FMT,&format); if(err){ printf("error seting format\n"); exit(1); } printf("imagesize: %i bytesperline %i\n",format.fmt.pix.sizeimage,format.fmt.pix.bytesperline); char *s = (char *) malloc (x * y); if (s == NULL) { exit (1); } char *d = (char *) malloc (x * y * 3); if (d == NULL) { exit (1); } char *q = (char *) malloc (x * y * 3); if (q == NULL) { exit (1); } int count_=0; sonix_decompress_init (); while(1){ err=read(vid,q,x*y); if(err<0){ printf("error reading image,retry\n"); } printf("Read %i bytes\n",err); //decompress if( sonix_decompress (x, y, q, s)<0){ printf("sonix_error\n"); exit(1); } bayer2rgb24 (d, s, x, y); struct jpeg_compress_struct cinfo; FILE* outfile; struct jpeg_error_mgr jerr; cinfo.err=jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); count_++; if ((outfile = fopen("out_.jpg", "wb")) == NULL) { printf( "can't open out_.jpg\n" ); exit(1); } jpeg_stdio_dest(&cinfo, outfile); cinfo.image_width = x; /* image width and height, in pixels */ cinfo.image_height = y; cinfo.input_components = 3; /* # of color components per pixel */ cinfo.in_color_space = JCS_RGB; /* colorspace of input image */ jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, 80, TRUE /* limit to baseline-JPEG values */); jpeg_start_compress(&cinfo, TRUE); int row_stride=3*x; JSAMPROW row_pointer[1]; /* pointer to JSAMPLE row[s] */ while (cinfo.next_scanline < cinfo.image_height) { row_pointer[0] = & d[cinfo.next_scanline * row_stride]; (void) jpeg_write_scanlines(&cinfo, row_pointer, 1); } jpeg_finish_compress(&cinfo); fclose(outfile); jpeg_destroy_compress(&cinfo); system("./ftpcopy.sh"); sleep(1); } } 4)Копируем файлы bayer.c, bayer.h, sonix_compress.c, sonix_compress.h в рабочий каталог 5)Создам файл ftpcopy.sh и устанавливаем на него права на выполнение и чтение: #!/bin/sh ftp -n<script mv out_.jpg out.jpg 6)создаем файл script: open www.yourwebserver.ru user your_user your_password cd public_html binary put out_.jpg rename out_.jpg out.jpg by 7)Выполняем команду make и получаем программку capt. На этом этап 2 закончен. Этап 3 ------ Публикуем полученный результат. Заходим на web сервер под пользователем your_user Создаём в домашнем каталоге каталог public_html и в нем index.html следующего содержания: <html> <head> <title>my web cam</title> <META HTTP-EQUIV="refresh" content="1"/> </head> <body> <img src=out.jpg> </body> </html> Все готово. Теперь запускаем програмку capt и заходим на сайт http://www.yourwebserver.ru/~your_user/ И радуемся картинке с вашей web камеры. Извиняюсь за не совсем грамотно написанный код, он писался на коленке))) Удачи!))

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Casper (??), 15:17, 29/03/2007 [ответить]  
  • +/
    Подскажите как эту камеру прикрутить к фри?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру