Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.04.2012, 16:46
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 1  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Cool Бинаризация, фильтрация, выделение контуров объектов с видео и потока с камеры

Курсовая по Компьютерному зрению. Решил сделать на flash'е.
По сути, было бы неплохо получать полные кадры обрабатывать их и выводить в отдельный поток для воспроизведения.
Думал об использовании URLStream и NetStream.appendBytes().
Но раскодирует ли URLStream .flv и .mp4 файлы и уберет ли межкадровое сжатие?
И что придумать с камерой?

Старый 29.04.2012, 17:56
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Мне как бы не хочется отговаривать, но если уж на то пошло, то это будет и тяжело флешу (т.как много рассчетов), да и бороться со всякими неувязками, типа как получить информацию из камеры, как распарсить и т.д.
С другой стороны, есть вот такая интересная вещь https://github.com/ryepup/cl-opencv (я с ней только в качестве Лисповой библиотеки сталкивался, но это, на самом деле библиотека на Си + к ней обертка на Лиспе, там в ридми описывается откуда сама сишная библиотека.
Что бы я попробовал - NaCl или Alchemy (т.е. либо попытаться скомпилировать эту библиотеку для Native Client и уже от этого отталкиваться), либо попытаться портировать ее во Флеш с помощью Alchemy.
Но, к сожалению, моих познаний в Си не хватит, для нормального использования библиотеки Так что это только в качестве "подсказки".
__________________
Hell is the possibility of sanity

Старый 29.04.2012, 18:22
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 3  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Печально. Возможно ктонибудь придумал выход со стандартными средствами?

Старый 29.04.2012, 18:31
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Есть куча готовых портов openCV на флеш. Достаточно поискать "as3 opencv" на гуглокоде.

Добавлено через 1 минуту
На github тоже есть, включая расширения для AIR.
__________________
משיח לא בא
משיח גם לא מטלפן


Последний раз редактировалось alatar; 29.04.2012 в 18:34.
Старый 29.04.2012, 18:36
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 5  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Спасибо)

Старый 29.04.2012, 18:45
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Но раскодирует ли URLStream .flv и .mp4 файлы и уберет ли межкадровое сжатие?
URLStream ничего не раскодирует, да и NetStream вас не поймет, если вы ему скормите данные без заголовков flv.

Добавлено через 5 минут
P.S. вот еще есть библиотека.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 29.04.2012, 19:33
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 7  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Вроде пока, что видел, так это библиотеки уже созданных методов распознавания и тп.
Мне не совсем это надо.
Мне по сути нужна матрица (кадр, byteArray) со значениями типа 0x0FA456E1 (4 байта), которую я могу обработать и вывести на экран.

Старый 29.04.2012, 19:38
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 8  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Класс Video является наследником DisplayObject, который, в свою очередь, реализует интерфейс IBitmapDrawable, что означает возможность передачи его в качестве параметра source в метод draw класса BitmapData.

Добавлено через 3 минуты
BitmapData может быть выведена с помощью Bitmap.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 29.04.2012, 20:18
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 9  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Супер! Спасибо!) Уже неплохо. Но все же байтов под руками у меня нет( Все что можно делать, это ColorTransform юзать. А нужно больше функционала и мне свои алгоритмы писать.

Старый 29.04.2012, 20:24
sephira вне форума Посмотреть профиль Отправить личное сообщение для sephira Найти все сообщения от sephira
  № 10  
Ответить с цитированием
sephira

Регистрация: Apr 2012
Сообщений: 26
Все, я понял. Буду пользовать getPixels и setPixels)

Добавлено через 24 минуты
Код AS3:
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;
				}
			}
		}
	}
}
Добавлено через 25 минут
Просьба указать на ошибки и прокатит ли такой метод?

Добавлено через 28 минут
Отображается лишь video и то, почему-то черным экраном.

Добавлено через 6 часов 54 минуты
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 18:02.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.