![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Apr 2012
Сообщений: 26
|
Курсовая по Компьютерному зрению. Решил сделать на flash'е.
По сути, было бы неплохо получать полные кадры обрабатывать их и выводить в отдельный поток для воспроизведения. Думал об использовании URLStream и NetStream.appendBytes(). Но раскодирует ли URLStream .flv и .mp4 файлы и уберет ли межкадровое сжатие? И что придумать с камерой? |
|
|||||
|
Modus ponens
|
Мне как бы не хочется отговаривать, но если уж на то пошло, то это будет и тяжело флешу (т.как много рассчетов), да и бороться со всякими неувязками, типа как получить информацию из камеры, как распарсить и т.д.
С другой стороны, есть вот такая интересная вещь https://github.com/ryepup/cl-opencv (я с ней только в качестве Лисповой библиотеки сталкивался, но это, на самом деле библиотека на Си + к ней обертка на Лиспе, там в ридми описывается откуда сама сишная библиотека. Что бы я попробовал - NaCl или Alchemy (т.е. либо попытаться скомпилировать эту библиотеку для Native Client и уже от этого отталкиваться), либо попытаться портировать ее во Флеш с помощью Alchemy. Но, к сожалению, моих познаний в Си не хватит, для нормального использования библиотеки Так что это только в качестве "подсказки".
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 26
|
Печально. Возможно ктонибудь придумал выход со стандартными средствами?
|
|
|||||
|
Есть куча готовых портов openCV на флеш. Достаточно поискать "as3 opencv" на гуглокоде.
Добавлено через 1 минуту На github тоже есть, включая расширения для AIR.
__________________
משיח לא בא משיח גם לא מטלפן Последний раз редактировалось alatar; 29.04.2012 в 18:34. |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 26
|
Спасибо)
|
|
|||||
|
Цитата:
Добавлено через 5 минут P.S. вот еще есть библиотека.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 26
|
Вроде пока, что видел, так это библиотеки уже созданных методов распознавания и тп.
Мне не совсем это надо. Мне по сути нужна матрица (кадр, byteArray) со значениями типа 0x0FA456E1 (4 байта), которую я могу обработать и вывести на экран. |
|
|||||
|
Класс Video является наследником DisplayObject, который, в свою очередь, реализует интерфейс IBitmapDrawable, что означает возможность передачи его в качестве параметра source в метод draw класса BitmapData.
Добавлено через 3 минуты BitmapData может быть выведена с помощью Bitmap.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 26
|
Супер! Спасибо!) Уже неплохо. Но все же байтов под руками у меня нет( Все что можно делать, это ColorTransform юзать. А нужно больше функционала и мне свои алгоритмы писать.
|
|
|||||
|
Регистрация: Apr 2012
Сообщений: 26
|
Все, я понял. Буду пользовать getPixels и setPixels)
Добавлено через 24 минуты package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Sprite; import flash.events.Event; import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.utils.ByteArray; public class Testvideo extends Sprite { private var videoURL:String = 'Deeper112.flv'; private var connection:NetConnection; private var stream:NetStream; private var video:Video = new Video(); public var bm:Bitmap; public function Testvideo() { connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); connection.connect(null); } private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": connectStream(); break; case "NetStream.Play.StreamNotFound": trace("Stream not found: " + videoURL); break; } } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function connectStream():void { var stream:NetStream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); video.attachNetStream(stream); stream.play(videoURL); addChild(video); bm = new Bitmap(); addChild(bm); bm.x = video.width+10; addEventListener(Event.ENTER_FRAME,onEnterHandler); } public function onEnterHandler(e:Event):void { var bmd:BitmapData = new BitmapData(video.width,video.height); var bmd2:BitmapData = new BitmapData(video.width,video.height); //var mtx:Matrix = new Matrix(0,0,0,0,0,0); //var ct:ColorTransform = new ColorTransform(1,1,1,1,10,0,0,0); bmd.draw(video); var rct:Rectangle = new Rectangle(0,0,video.width,video.height); var ba:ByteArray = new ByteArray(); ba = bmd.getPixels(rct); //trace(ba[0]); // Преобразуем в матрицу var image:Array = new Array(); for (var i:int=0;i<video.width;i++) { image[i] = new Array(); for (var j:int=0;j<video.height;j++) { image[i][j] = ba[i*video.width+j]; } } computeData(image); for (i=0;i<image.length;i++) { for (j=0;j<image[i].length;j++) { ba[i*video.width+j] = image[i][j]; } } bmd2.setPixels(rct,ba); bm.bitmapData = bmd2; } public function computeData(image:Array):void { for (var i:int=0;i<image.length;i++) { for (var j:int=0;j<image[i].height;j++) { image[i][j] = 0; } } } } } Просьба указать на ошибки и прокатит ли такой метод? Добавлено через 28 минут Отображается лишь video и то, почему-то черным экраном. Добавлено через 6 часов 54 минуты package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Sprite; import flash.events.Event; import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Point; import flash.geom.Rectangle; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; import flash.utils.ByteArray; public class Testvideo extends Sprite { private var videoURL:String = 'Deeper112.flv'; private var connection:NetConnection; private var stream:NetStream; private var video:Video = new Video(); public var bm:Bitmap; public var bm2:Bitmap; public function Testvideo() { connection = new NetConnection(); connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); connection.connect(null); } private function netStatusHandler(event:NetStatusEvent):void { switch (event.info.code) { case "NetConnection.Connect.Success": connectStream(); break; case "NetStream.Play.StreamNotFound": trace("Stream not found: " + videoURL); break; } } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } private function connectStream():void { var stream:NetStream = new NetStream(connection); stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); video.attachNetStream(stream); stream.play(videoURL); addChild(video); bm = new Bitmap(); addChild(bm); bm.x = video.width+10; bm2 = new Bitmap(); addChild(bm2); bm2.y = video.height+10; addEventListener(Event.ENTER_FRAME,onEnterHandler); } public function onEnterHandler(e:Event):void { var bmd:BitmapData = new BitmapData(video.width,video.height); var bmd2:BitmapData = new BitmapData(video.width,video.height); //var mtx:Matrix = new Matrix(1,0,0,1,0,0); //var ct:ColorTransform = new ColorTransform(1,1,1,1,10,0,0,0); var rct:Rectangle = new Rectangle(0,0,video.width,video.height); var pt:Point = new Point(0,0); bm.bitmapData = bmd; bm2.bitmapData = bmd2; bmd.draw(video); //var ba:ByteArray = new ByteArray(); //ba = bmd.getPixels(rct); //ba.position = 0; //trace(ba[0]); // Преобразуем в матрицу //bmd2.copyPixels(bmd,rct,pt);/* var image:Array = new Array(); for (var i:uint=0;i<bmd.width;i++) { var tmp:Array = new Array(); for (var j:uint=0;j<bmd.height;j++) { var tmp2:uint = bmd.getPixel(i,j); tmp.push(tmp2); trace(tmp2); //bmd2.setPixel(i,j,tmp2); } image.push(tmp); } computeData(image); for (i=0;i<image.length;i++) { for (j=0;j<image[i].length;j++) { bmd2.setPixel(i,j,image[i][j]); } } } public function computeData(image:Object):void { for (var i:uint=0;i<image.length;i++) { for (var j:uint=0;j<image[i].length;j++) { image[i][j] = 0; } } } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|