Mercurial > ift6266
diff demo/Test1.mxml @ 540:269c39f55134
Added demo source files
author | boulanni <nicolas_boulanger@hotmail.com> |
---|---|
date | Wed, 02 Jun 2010 01:34:49 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/demo/Test1.mxml Wed Jun 02 01:34:49 2010 -0400 @@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="utf-8"?> + +<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> + <mx:Image x="432" y="394" width="300" height="300" id="img" autoLoad="true" scaleContent="true"/> + <mx:Image x="116" y="197" width="200" height="200" id="imdraw"/> + <mx:HSlider x="503" y="150" id="rot" minimum="-180" maximum="180" value="0" liveDragging="true" change="changeImage()"/> + <mx:HSlider x="503" y="120" minimum="-2" maximum="2" value="1" liveDragging="true" id="scalex" change="changeImage()"/> + <mx:HSlider x="687" y="120" minimum="-2" maximum="2" value="1" liveDragging="true" id="scaley" change="changeImage()"/> + <mx:HSlider x="503" y="90" minimum="-10" maximum="10" value="0" liveDragging="true" id="transx" change="changeImage()"/> + <mx:HSlider x="683" y="90" minimum="-10" maximum="10" value="0" liveDragging="true" id="transy" change="changeImage()"/> + <mx:HSlider x="503" y="178" id="skew" liveDragging="true" minimum="-1" maximum="1" change="changeImage()" value="0"/> + <mx:Label x="839" y="414" text="X" id="lab0" width="43" height="36" fontSize="12" fontWeight="bold" textAlign="left" color="#0B333C" fontFamily="Verdana"/> + <mx:Button x="128" y="405" label="Erase" click="can2.graphics.clear();changeDrawing();changeImage()"/> + <mx:Label x="371" y="90" text="Translation"/> + <mx:Label x="839" y="285" text="Restrict to:"/> + <mx:Label x="371" y="116" text="Scale"/> + <mx:Label x="371" y="148" text="Rotation"/> + <mx:Label x="371" y="175" text="Skew"/> + <mx:Label x="371" y="206" text="Salt & Pepper Noise" width="134" height="20"/> + <mx:HSlider x="503" y="208" id="spnoise" liveDragging="true" minimum="0" maximum="1" change="changeImage()" value="0"/> + <mx:Label x="371" y="232" text="Gaussian Noise" width="108" height="20"/> + <mx:HSlider x="503" y="234" id="gnoise" liveDragging="true" minimum="0" maximum="1" change="changeImage()" value="0"/> + <mx:Label x="118" y="175" text="Draw here:" fontSize="10" fontWeight="bold"/> + <mx:Label x="371" y="64" text="Transforms:" fontSize="10" fontWeight="bold"/> + <mx:Label x="433" y="368" text="Resulting image:" fontSize="10" fontWeight="bold"/> + <mx:Label x="835" y="236" text="Classifier:" fontSize="10" fontWeight="bold"/> + +<mx:Script> + <![CDATA[ + import mx.effects.Blur; + import flash.utils.*; + import flash.display.*; + import flash.geom.*; + private var can2:Sprite = new Sprite() + + import cmodule.mlp_conv.CLibInit; + + [Embed(source="mlp_w1", mimeType="application/octet-stream")] private static var mlp_w1:Class; + [Embed(source="mlp_b1", mimeType="application/octet-stream")] private static var mlp_b1:Class; + [Embed(source="mlp_w2", mimeType="application/octet-stream")] private static var mlp_w2:Class; + [Embed(source="mlp_b2", mimeType="application/octet-stream")] private static var mlp_b2:Class; + + [Embed(source="sda_w1", mimeType="application/octet-stream")] private static var sda_w1:Class; + [Embed(source="sda_b1", mimeType="application/octet-stream")] private static var sda_b1:Class; + [Embed(source="sda_w2", mimeType="application/octet-stream")] private static var sda_w2:Class; + [Embed(source="sda_b2", mimeType="application/octet-stream")] private static var sda_b2:Class; + [Embed(source="sda_w3", mimeType="application/octet-stream")] private static var sda_w3:Class; + [Embed(source="sda_b3", mimeType="application/octet-stream")] private static var sda_b3:Class; + [Embed(source="sda_w4", mimeType="application/octet-stream")] private static var sda_w4:Class; + [Embed(source="sda_b4", mimeType="application/octet-stream")] private static var sda_b4:Class; + + private var loader:CLibInit; + private var lib:Object; + + private var carac:String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + private function init():void{ + var mlp_w1_data:ByteArray = new mlp_w1(); + var mlp_b1_data:ByteArray = new mlp_b1(); + var mlp_w2_data:ByteArray = new mlp_w2(); + var mlp_b2_data:ByteArray = new mlp_b2(); + + var sda_w1_data:ByteArray = new sda_w1(); + var sda_b1_data:ByteArray = new sda_b1(); + var sda_w2_data:ByteArray = new sda_w2(); + var sda_b2_data:ByteArray = new sda_b2(); + var sda_w3_data:ByteArray = new sda_w3(); + var sda_b3_data:ByteArray = new sda_b3(); + var sda_w4_data:ByteArray = new sda_w4(); + var sda_b4_data:ByteArray = new sda_b4(); + + mlp_w1_data.endian = Endian.LITTLE_ENDIAN; + mlp_b1_data.endian = Endian.LITTLE_ENDIAN; + mlp_w2_data.endian = Endian.LITTLE_ENDIAN; + mlp_b2_data.endian = Endian.LITTLE_ENDIAN; + + sda_w1_data.endian = Endian.LITTLE_ENDIAN; + sda_b1_data.endian = Endian.LITTLE_ENDIAN; + sda_w2_data.endian = Endian.LITTLE_ENDIAN; + sda_b2_data.endian = Endian.LITTLE_ENDIAN; + sda_w3_data.endian = Endian.LITTLE_ENDIAN; + sda_b3_data.endian = Endian.LITTLE_ENDIAN; + sda_w4_data.endian = Endian.LITTLE_ENDIAN; + sda_b4_data.endian = Endian.LITTLE_ENDIAN; + + mlp_w1_data.position = 0; + mlp_b1_data.position = 0; + mlp_w2_data.position = 0; + mlp_b2_data.position = 0; + + sda_w1_data.position = 0; + sda_b1_data.position = 0; + sda_w2_data.position = 0; + sda_b2_data.position = 0; + sda_w3_data.position = 0; + sda_b3_data.position = 0; + sda_w4_data.position = 0; + sda_b4_data.position = 0; + + loader = new CLibInit; + lib = loader.init(); + lib.initparam(mlp_w1_data, mlp_b1_data, mlp_w2_data, mlp_b2_data, sda_w1_data, sda_b1_data, sda_w2_data, sda_b2_data, sda_w3_data, sda_b3_data, sda_w4_data, sda_b4_data); + lib.choosemodel(0); + + changeDrawing(); + changeImage(); + + imdraw.addEventListener(MouseEvent.MOUSE_DOWN, begin_drawing); + //imdraw.addEventListener(MouseEvent.ROLL_OUT, stop_drawing); + imdraw.addEventListener(MouseEvent.MOUSE_UP, stop_drawing); + + calc_pred(); + } + + private function calc_done(out:Array):void { + var i:uint, s:Number = 0; + if (!ch_dig.selected) for(i=0; i<10; i++) out[i] = 0; + if (!ch_upper.selected) for(i=10; i<36; i++) out[i] = 0; + if (!ch_lower.selected) for(i=36; i<62; i++) out[i] = 0; + if(modelnum.selectedIndex == 0) { + for(i=0; i<62; i++) s += out[i]; + if(s) for(i=0; i<62; i++) out[i] /= s; + } + + var ind:Array = out.sort(Array.DESCENDING | Array.RETURNINDEXEDARRAY | Array.NUMERIC); + lab0.text = carac.charAt(ind[0]) + lab1.text = carac.charAt(ind[1]) + lab2.text = carac.charAt(ind[2]) + rec0.width = out[ind[0]]*130 + rec1.width = out[ind[1]]*130 + rec2.width = out[ind[2]]*130 + //rec0.setStyle("backgroundColor", 0xff0000); + + setTimeout(calc_pred, 10); + } + + private function calc_pred():void { + var bd:BitmapData = imnorm.source.bitmapData; + var rect:Rectangle = new Rectangle(0, 0, 32, 32); + var bytes:ByteArray = bd.getPixels(rect); + bytes.position = 0; + lib.choosemodel(modelnum.selectedIndex); + lib.prediction(calc_done, bytes); + } + + private function begin_drawing(event:MouseEvent):void { + can2.graphics.lineStyle(thickness.value * imdraw.width/32, 0xFFFFFFFF); + can2.graphics.moveTo(imdraw.mouseX, imdraw.mouseY) + imdraw.addEventListener(MouseEvent.MOUSE_MOVE, draw_line); + } + private function stop_drawing(e:MouseEvent):void + { + imdraw.removeEventListener(MouseEvent.MOUSE_MOVE, draw_line); + } + + private function draw_line(e:MouseEvent):void + { + var x:Number = imdraw.mouseX, y:Number = imdraw.mouseY + /*if (x<0 || x>imdraw.width || y<0 || y>imdraw.height) { + stop_drawing(e) + return + }*/ + can2.graphics.lineTo(x, y); + changeDrawing() + changeImage() + e.updateAfterEvent(); + } + + private function changeDrawing():void{ + var bitmapDataObject2:BitmapData = new BitmapData(32, 32, false, 0x00000000); + var rect:Rectangle = new Rectangle(0, 0, 32, 32); + var m:Matrix = new Matrix() + m.scale(32/imdraw.width, 32/imdraw.height) + bitmapDataObject2.draw(can2,m,null,null,null,true); + var myBitmap:Bitmap = new Bitmap(bitmapDataObject2); + imdraw.source = myBitmap; + } + + private var ready:Boolean = false; + private var cache:Number; + public function RandNormal(sigma:Number):Number { + ready = !ready; + if (!ready) return cache * sigma; + var x:Number = Math.sqrt(-2 * Math.log(Math.random())), y:Number = Math.random() + cache = x * Math.cos(2*Math.PI*y); + return x * Math.sin(2*Math.PI*y) * sigma; + } + + private function changeImage():void{ + + var bitmapDataObject2:BitmapData = new BitmapData(32, 32, false, 0x00000000); + + var can3:Sprite = new Sprite() + var x:Number, y:Number, l:int, t:Number, w:int, c:uint, n:uint + n = int(0.999 + 3*rat.value) + for(var j:uint=0; j<n; j++) { + x = -10+ Math.random()*52 + y = -10 + Math.random()*52 + l = 5 + 30*rat.value*Math.random() + t = 2*Math.PI * Math.random() + w = 1 + 3*rat.value*Math.random() + c = 50+ 250*rat.value*Math.random() + can3.graphics.lineStyle(w, c | c<<8 | c<<16 | c<<24); + can3.graphics.moveTo(x, y) + can3.graphics.lineTo(x + l*Math.cos(t), y + l*Math.sin(t)); + } + bitmapDataObject2.draw(can3,null,null,null,null,true); + + var m:Matrix = new Matrix() + m.scale(32/imdraw.width, 32/imdraw.height) + m.translate(-16,-16) + m.concat(new Matrix(1,0,-skew.value,1)) + m.scale(scalex.value, scaley.value) + m.rotate(Math.PI* rot.value/180) + m.translate(transx.value, transy.value) + m.translate(16,16) + + bitmapDataObject2.draw(can2,m,null,null,null,true); + + var rect:Rectangle = new Rectangle(0, 0, 32, 32); + var bytes:ByteArray = bitmapDataObject2.getPixels(rect); + + bytes.position = 0; + for(var i:uint=0; i<4*32*32; i+=4) { + //bytes[i]=0 + var g:int = bytes[i+1] + + if (Math.random() < spnoise.value/5) + g = Math.random() * 255 + + g += RandNormal(gnoise.value*55) + g = Math.min(Math.max(g,0),255) + + g = 127.5 + (g-127.5)*contr.value + bytes[i+1]=bytes[i+2]=bytes[i+3] = g + } + + bitmapDataObject2.setPixels(rect, bytes); + + var myBitmap:Bitmap = new Bitmap(bitmapDataObject2); + img.source = myBitmap; + + NormImage(); + } + + private function NormImage():void{ + var rect:Rectangle = new Rectangle(0, 0, 32, 32); + + /*var f:BlurFilter = new BlurFilter(5.0, 5.0, 1); + var b2:BitmapData = new BitmapData(32, 32, false, 0); + b2.applyFilter(img.source.bitmapData, rect, new Point(0,0), f);*/ + //var b2:BitmapData = img.source.bitmapData.clone(); + + var bytes:ByteArray = img.source.bitmapData.getPixels(rect); + bytes.position = 0; + + var pix:Array = new Array(32*32); + var i:int, j:int; + for(i=0; i<32*32; i++) + pix[i] = bytes[4*i+1]; + + var ind:Array = pix.sort(Array.RETURNINDEXEDARRAY | Array.NUMERIC); + var med:Number = pix[ind[32*32/2]]; + var ci:Number = 0, cj:Number = 0, s:Number = 0, mtot:Number=0; + for(i=0; i<32; i++) + for(j=0; j<32; j++) { + var g:int = pix[j*32+i]; + g = Math.abs(g-med); + mtot += g; + ci += g*i; + cj += g*j; + } + ci /= mtot; + cj /= mtot; + + for(i=0; i<32; i++) + for(j=0; j<32; j++) { + g = pix[j*32+i]; + g = Math.abs(g-med); + s += g* ((i-ci)*(i-ci) + (j-cj)*(j-cj)); + } + s = Math.sqrt(s / mtot); + s = Math.max(s, 3) + s = 9/s; + + var bitmapDataObject2:BitmapData = new BitmapData(32, 32, false, med | med<<8 | med<<16); + + var m:Matrix = new Matrix() + m.translate(-ci, -cj) + m.scale(s, s) + m.translate(16, 16) + + bitmapDataObject2.draw(img.source.bitmapData,m,null,null,null,true); + + var myBitmap:Bitmap = new Bitmap(bitmapDataObject2); + imnorm.source = myBitmap; + } + ]]> +</mx:Script> + <mx:CheckBox x="840" y="309" label="Digits" selected="true" id="ch_dig"/> + <mx:CheckBox x="840" y="338" label="Uppercase letters" selected="true" id="ch_upper"/> + <mx:CheckBox x="840" y="368" label="Lowercase letters" selected="true" id="ch_lower"/> + <mx:Canvas x="863" y="419" width="130" height="8" borderStyle="solid" borderColor="#B1C6CA" backgroundColor="#567B83" id="rec0"> + </mx:Canvas> + <mx:Label x="839" y="442" text="Y" id="lab1" width="43" height="36" fontSize="12" fontWeight="bold" textAlign="left" color="#0B333C" fontFamily="Verdana"/> + <mx:Canvas x="863" y="448" width="130" height="8" borderStyle="solid" borderColor="#B1C6CA" backgroundColor="#567B83" id="rec1"> + </mx:Canvas> + <mx:Label x="839" y="471" text="Z" id="lab2" width="43" height="36" fontSize="12" fontWeight="bold" textAlign="left" color="#0B333C" fontFamily="Verdana"/> + <mx:Canvas x="863" y="477" width="130" height="8" borderStyle="solid" borderColor="#B1C6CA" backgroundColor="#567B83" id="rec2"> + </mx:Canvas> + <mx:ComboBox x="912" y="234" editable="false" id="modelnum" selectedIndex="1"><mx:ArrayCollection> + <mx:String>Shallow MLP 500 h.u. /NIST</mx:String> + <mx:String>Deep SDA 3x1000 h.u. /P07</mx:String> + </mx:ArrayCollection></mx:ComboBox> + <mx:Button x="475" y="60" label="Reset" click="transx.value=transy.value=0;scalex.value=scaley.value=1; rot.value=skew.value=spnoise.value=gnoise.value=rat.value=0; contr.value=1; changeImage();"/> + <mx:Label x="371" y="260" text="Polarity / Contrast" width="108" height="20"/> + <mx:HSlider x="503" y="262" id="contr" liveDragging="true" minimum="-1" maximum="1" change="changeImage()" value="1"/> + <mx:Label x="371" y="288" text="Crossings Amount" width="108" height="20"/> + <mx:Label x="115" y="444" text="Thickness" width="108" height="20"/> + <mx:HSlider x="503" y="290" id="rat" liveDragging="true" minimum="0" maximum="1" change="changeImage()" value="0"/> + <mx:Image x="992" y="285" width="100" height="100" id="imnorm" autoLoad="true" scaleContent="true"/> + <mx:HSlider x="194" y="443" id="thickness" liveDragging="true" minimum="0.1" maximum="10" value="1.9" width="121"/> + <mx:Button x="671" y="221" label="Shuffle" click="changeImage()" width="71"/> + +</mx:Application> + +