{"id":1051,"date":"2012-07-12T18:32:50","date_gmt":"2012-07-12T09:32:50","guid":{"rendered":"http:\/\/www.digifie.jp\/blog\/?p=1051"},"modified":"2012-07-13T00:34:01","modified_gmt":"2012-07-12T15:34:01","slug":"surf-as3-%e3%82%92%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%81%be%e3%81%97%e3%81%9f","status":"publish","type":"post","link":"https:\/\/www.digifie.jp\/blog\/archives\/1051","title":{"rendered":"Surf AS3 \u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f"},"content":{"rendered":"<div class='wp_social_bookmarking_light'>        <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=https%3A%2F%2Fwww.digifie.jp%2Fblog%2Farchives%2F1051&t=Surf%20AS3%20%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='https:\/\/www.digifie.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>        <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.digifie.jp\/blog\/archives\/1051\" data-text=\"Surf AS3 \u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\" data-via=\"LLC DigiFie\" data-lang=\"ja\">Tweet<\/a><\/div><\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n<p>\u753b\u50cf\u304b\u3089\u7279\u5fb4\u70b9\u3092\u62bd\u51fa\u3059\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 Surf \u3092 AS3 \u306b\u79fb\u690d\u3057\u305f\u30e9\u30a4\u30d6\u30e9\u30ea<br \/>\n<a href=\"http:\/\/www.visualiser.fr\/blog\/index.php?q=content\/image-processing-opensurf-algorithm-source-c-as3\" target=\"_blank\"> OpenSurf Source from C++ to AS3<\/a> \u3068\u3044\u3046\u30e4\u30c4\u3092\u898b\u3064\u3051\u305f\u306e\u3067\u3061\u3087\u3063\u3068\u30c6\u30b9\u30c8\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u3061\u306a\u307f\u306b Surf \u306b\u3064\u3044\u3066\u306f\u3053\u306e\u30b9\u30e9\u30a4\u30c9<a href=\"http:\/\/www.slideshare.net\/lawmn\/siftsurf\" target=\"_blank\">\uff08http:\/\/www.slideshare.net\/lawmn\/siftsurf\uff09<\/a>\u306a\u3069\u3067\u8aac\u660e\u3055\u308c\u3066\u3044\u307e\u3059\u3002\uff08\u4ed6\u306b\u3082\u30b0\u30b0\u308c\u3070\u305f\u304f\u3055\u3093\u51fa\u3066\u304d\u307e\u3059\uff09<\/p>\n<p>\u3067\u3001\u8a66\u3057\u3066\u307f\u305f\u611f\u60f3\u3067\u3059\u304c\u2026<\/p>\n<p>C++ \u304b\u3089\u306e AS3 \u79fb\u690d\u7248\u306a\u306e\u3067\u3001\u4e88\u60f3\u901a\u308a\u30e1\u30c1\u30e3\u30af\u30c1\u30e3\u9045\u3044\u3067\u3059w<br \/>\n\u307e\u3041\u53c2\u7167\u5143\u306e\u30b5\u30a4\u30c8\u306b\u3082 &#8220;It would be cool if someone could speed up this process ! Furthermore I have few doubts about my matrix conversions&#8230; (in FastHessian.as).&#8221; \u3068\u3042\u308b\u304f\u3089\u3044\u306a\u306e\u3067\u3001<strong>\u300c\u8ab0\u304b\u3053\u3044\u3064\u3092\u9ad8\u901f\u5316\u3057\u3066\u304f\u308c\u3088\uff01\u300d<\/strong>\u3068\u3044\u3046\u611f\u3058\u306a\u306e\u3067\u3057\u3087\u3046\u3051\u3069\u3002<\/p>\n<p>\u3068\u3044\u3046\u308f\u3051\u3067\u3001\u30c7\u30e2\u306f\u3053\u3061\u3089\u3002<\/p>\n<div id=\"attachment_1053\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/www.digifie.jp\/labo\/surf_as3_test\/\" target=\"_blank\"><img aria-describedby=\"caption-attachment-1053\" decoding=\"async\" loading=\"lazy\" src=\"http:\/\/www.digifie.jp\/blog\/wp-content\/uploads\/2012\/07\/surf_as3_test.jpg\" alt=\"Surf AS3 Test\" title=\"Surf AS3 Test\" width=\"590\" height=\"443\" class=\"size-full wp-image-1053\" srcset=\"https:\/\/www.digifie.jp\/blog\/wp-content\/uploads\/2012\/07\/surf_as3_test.jpg 590w, https:\/\/www.digifie.jp\/blog\/wp-content\/uploads\/2012\/07\/surf_as3_test-300x225.jpg 300w\" sizes=\"(max-width: 590px) 100vw, 590px\" \/><\/a><p id=\"caption-attachment-1053\" class=\"wp-caption-text\">\u753b\u50cf\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u30c7\u30e2\u753b\u9762\u304c\u958b\u304d\u307e\u3059\u3002<br \/>\n\u30c7\u30e2\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u5b9f\u884c\u306f Web Camera \u306e\u6620\u50cf\u304c\u51fa\u3066\u304b\u3089\u753b\u9762\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p><\/div>\n<p>\u3053\u3093\u306a\u611f\u3058\u3067\u3001\u610f\u5473\u304c\u5206\u304b\u3089\u306a\u3044\u307e\u307e\u30b4\u30c1\u30e3\u30b4\u30c1\u30e3\u3044\u3058\u3063\u3066\u3044\u308b\u3068\u591a\u5c11\u52d5\u304f\u3088\u3046\u306b\u306f\u306a\u3063\u305f\u306e\u3067\u3059\u304c\u3001\u305d\u308c\u3067\u3082\u91cd\u3044\u3067\u3059\u306d\u30fc\u3002<\/p>\n<p>\u4eca\u56de\u306e\u30c7\u30e2\u306e\u30bd\u30fc\u30b9\u306f\u3053\u3061\u3089\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n\u9759\u6b62\u753b\u7528\u3060\u3063\u305f\u30e9\u30a4\u30d6\u30e9\u30ea\u4ed8\u5c5e\u306e\u30b5\u30f3\u30d7\u30eb\u3092\u3001Web\u30ab\u30e1\u30e9\u304b\u3089\u306e\u52d5\u753b\u5bfe\u5fdc\u306b\u5909\u66f4\u3057\u305f\u3060\u3051\u3067\u3059\u3051\u3069\u2026<\/p>\n<pre class=\"brush: as3; title: ; notranslate\" title=\"\">\r\npackage\r\n{\r\n\timport flash.display.Bitmap;\r\n\timport flash.display.BitmapData;\r\n\timport flash.display.Sprite;\r\n\timport flash.events.Event;\r\n\timport flash.events.MouseEvent;\r\n\timport flash.geom.Matrix;\r\n\timport flash.geom.Point;\r\n\timport flash.media.Camera;\r\n\timport flash.media.Video;\r\n\t\r\n\timport net.hires.debug.Stats;\r\n\t\r\n\timport surf.FastHessian;\r\n\timport surf.IPoint;\r\n\timport surf.IntegralImage;\r\n\timport surf.SurfDescriptor;\r\n\t\r\n\t\r\n\t[SWF( width = '640', height = '480', frameRate = '30', backgroundColor = '0' )]\r\n\t\r\n\tpublic class Main extends Sprite\r\n\t{\r\n\t\t[Embed( source = &quot;.\/assets\/bg.png&quot; )]\r\n\t\tprivate static var imgClass:Class;\r\n\t\tpublic static var bg:Bitmap = new imgClass;\r\n\t\t\r\n\t\tprivate var _cam:Camera;\r\n\t\tprivate var _video:Video;\r\n\t\t\r\n\t\tprivate var _camImage:Bitmap;\r\n\t\tprivate var _camImageBuffer:BitmapData;\r\n\t\t\r\n\t\t\/\/ Cam\r\n\t\tprivate var _integral:IntegralImage;\r\n\t\tprivate var _ipts:Vector.&lt;IPoint&gt;;\r\n\t\t\r\n\t\t\/\/ Static\r\n\t\tprivate var _integralStatic:IntegralImage;\r\n\t\tprivate var _iptsStatic:Vector.&lt;IPoint&gt;;\r\n\t\t\r\n\t\tprivate var _afin:Number = 0.003;\r\n\t\t\r\n\t\tprivate var _circle:Sprite;\r\n\t\tprivate var _connectLiner:Sprite;\r\n\t\t\r\n\t\tprivate var _isStarted:Boolean;\r\n\t\t\r\n\t\tpublic function Main()\r\n\t\t{\r\n\t\t\taddChild( bg );\r\n\t\t\tsetup();\r\n\t\t\t\r\n\t\t\tvar stats:Stats = new Stats();\r\n\t\t\tstats.x = 640 - 70;\r\n\t\t\taddChild( stats );\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\t\/\/ --------- Setup ------------------------------------------------ \/\r\n\t\tprivate function setup():void\r\n\t\t{\r\n\t\t\t\/\/ Camera &amp; Video\r\n\t\t\t_video = new Video( 320, 240 );\r\n\t\t\t_cam = Camera.getCamera();\r\n\t\t\t_cam.setMode( 320, 240, 30 );\r\n\t\t\t_video.attachCamera( _cam );\r\n\t\t\t\r\n\t\t\t\/\/ Image\r\n\t\t\t_camImage = new Bitmap();\r\n\t\t\t_camImageBuffer = new BitmapData( 320, 240, false, 0 );\r\n\t\t\t_camImage.bitmapData = _camImageBuffer;\r\n\t\t\t_camImage.x = 320;\r\n\t\t\t_camImage.y = 240;\r\n\t\t\taddChild( _camImage );\r\n\t\t\t\r\n\t\t\t_video.x = 320;\r\n\t\t\t_video.y = 240;\r\n\t\t\taddChild( _video );\r\n\t\t\t\r\n\t\t\t\/\/ Canvas\r\n\t\t\t_circle = new Sprite();\r\n\t\t\t_circle.x = 320;\r\n\t\t\t_circle.y = 240;\r\n\t\t\taddChild( _circle );\r\n\t\t\t\r\n\t\t\t_connectLiner = new Sprite()\r\n\t\t\taddChild( _connectLiner );\r\n\t\t\t\r\n\t\t\tstage.addEventListener( MouseEvent.CLICK, onStart );\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\tprivate function onStart( e:MouseEvent ):void\r\n\t\t{\r\n\t\t\tstage.removeEventListener( MouseEvent.CLICK, onStart );\r\n\t\t\taddEventListener( Event.ENTER_FRAME, update );\r\n\t\t\t\r\n\t\t\tremoveChild( _video );\r\n\t\t}\r\n\r\n\t\t\r\n\t\t\/\/ --------- Update ------------------------------------------------ \/\r\n\t\tprivate function update( e:Event ):void\r\n\t\t{\r\n\t\t\t\r\n\t\t\t_camImageBuffer.lock();\r\n\t\t\t_camImageBuffer.draw( _video );\r\n\t\t\t_camImageBuffer.unlock();\r\n\t\t\t\r\n\t\t\t_ipts = new Vector.&lt;IPoint&gt;();\r\n\t\t\t\r\n\t\t\t\/\/\r\n\t\t\t_integral = new IntegralImage( _camImage );\r\n\t\t\tvar f:FastHessian = new FastHessian( _afin, 5, 3, _integral );\r\n\t\t\t_ipts = f.getIpoints();\r\n\t\t\tvar surf:SurfDescriptor = new SurfDescriptor( _ipts, false, false, _integral );\r\n\t\t\t\r\n\t\t\t_circle.graphics.clear();\r\n\t\t\t\r\n\t\t\tfor each ( var ip:IPoint in _ipts )\r\n\t\t\t{\r\n\t\t\t\tvar S:int = ( 2.5 * ip.scale );\r\n\t\t\t\tvar R:int = ( S * .5 );\r\n\t\t\t\tvar C:uint;\r\n\t\t\t\t\r\n\t\t\t\tvar AX:int = R * Math.cos( ip.orientation );\r\n\t\t\t\tvar AY:int = R * Math.sin( ip.orientation );\r\n\t\t\t\t\r\n\t\t\t\tip.laplacian &gt; 0 ? C = 0x0000ff : C = 0xff0000;\r\n\t\t\t\tdraw( _circle, ip.x, ip.y, S, R, C, AX, AY );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\/\/ SetStatic\r\n\t\t\tif( !_isStarted )\r\n\t\t\t{\r\n\t\t\t\t_isStarted = true;\r\n\t\t\t\t\r\n\t\t\t\t_iptsStatic = new Vector.&lt;IPoint&gt;();\r\n\t\t\t\t\r\n\t\t\t\tvar image:Bitmap = new Bitmap();\r\n\t\t\t\tvar buffer:BitmapData = new BitmapData( 320, 240, false, 0 );\r\n\t\t\t\timage.bitmapData = buffer;\r\n\t\t\t\taddChild( image );\r\n\t\t\t\t\r\n\t\t\t\tbuffer.lock();\r\n\t\t\t\tbuffer.draw( _video );\r\n\t\t\t\tbuffer.unlock();\r\n\t\t\t\t\r\n\t\t\t\t_integralStatic = new IntegralImage( image );\r\n\t\t\t\tvar ff:FastHessian = new FastHessian( _afin, 5, 3, _integralStatic );\r\n\t\t\t\t_iptsStatic = ff.getIpoints();\r\n\t\t\t\tvar surf1:SurfDescriptor = new SurfDescriptor( _iptsStatic, false, false, _integralStatic );\r\n\t\t\t\t\r\n\t\t\t\tvar circle:Sprite = new Sprite();\r\n\t\t\t\taddChild( circle );\r\n\t\t\t\t\r\n\t\t\t\tsetChildIndex(_connectLiner, numChildren - 1);\r\n\t\t\t\t\r\n\t\t\t\tfor each ( ip in _iptsStatic )\r\n\t\t\t\t{\r\n\t\t\t\t\tS = ( 2.5 * ip.scale );\r\n\t\t\t\t\tR = ( S * .5 );\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tAX = R * Math.cos( ip.orientation );\r\n\t\t\t\t\tAY = R * Math.sin( ip.orientation );\r\n\t\t\t\t\t\r\n\t\t\t\t\tip.laplacian &gt; 0 ? C = 0x0000ff : C = 0xff0000;\r\n\t\t\t\t\tdraw( circle, ip.x, ip.y, S, R, C, AX, AY );\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t_connectLiner.graphics.clear();\r\n\t\t\t\r\n\t\t\t\/\/ compare !\r\n\t\t\t\r\n\t\t\tvar dist:Number = 0;\r\n\t\t\tvar d1:Number = 0;\r\n\t\t\tvar d2:Number = 0;\r\n\t\t\tvar match:IPoint;\r\n\t\t\tvar matches:Vector.&lt;IPoint&gt; = new Vector.&lt;IPoint&gt;();\r\n\t\t\t\r\n\t\t\tfor ( var i:int = 0; i &lt; _iptsStatic.length; i++ )\r\n\t\t\t{\r\n\t\t\t\td1 = d2 = Number.MAX_VALUE;\r\n\t\t\t\t\r\n\t\t\t\tfor ( var j:int = 0; j &lt; _ipts.length; j++ )\r\n\t\t\t\t{\r\n\t\t\t\t\t\r\n\t\t\t\t\tdist = soustract( _iptsStatic[ i ], _ipts[ j ]);\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\tif ( dist &lt; d1 )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\td2 = d1;\r\n\t\t\t\t\t\td1 = dist;\r\n\t\t\t\t\t\tmatch = _ipts[ j ];\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if ( dist &lt; d2 )\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\td2 = dist;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tif ( d1 \/ d2 &lt; 0.65 )\r\n\t\t\t\t{\r\n\t\t\t\t\tmatch.x - _iptsStatic[ i ].x;\r\n\t\t\t\t\tmatch.y - _iptsStatic[ i ].y;\r\n\t\t\t\t\tmatches.push( _iptsStatic[ i ]);\r\n\t\t\t\t\tmatches.push( match );\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar a:Point = new Point( _iptsStatic[ i ].x, _iptsStatic[ i ].y );\r\n\t\t\t\t\tvar b:Point = new Point( match.x, match.y );\r\n\t\t\t\t\tdrawconnect( a, b );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\t\/\/ --------- Soustract ------------------------------------------------ \/\r\n\t\tprivate function soustract( thi:IPoint, rhs:IPoint ):Number\r\n\t\t{\r\n\t\t\t\r\n\t\t\tvar sum:Number = 0;\r\n\t\t\t\r\n\t\t\tfor ( var i:int = 0; i &lt; 64; ++i )\r\n\t\t\t\tsum += ( thi.descriptor[ i ] - rhs.descriptor[ i ]) * ( thi.descriptor[ i ] - rhs.descriptor[ i ]);\r\n\t\t\t\r\n\t\t\treturn Math.sqrt( sum );\r\n\t\t\t\r\n\t\t}\r\n\t\r\n\t\t\r\n\t\t\/\/ --------- Draw ConnectLine ------------------------------------------------ \/\r\n\t\tprivate function drawconnect( a:Point, b:Point ):void\r\n\t\t{\r\n\t\t\t\r\n\t\t\t_connectLiner.graphics.lineStyle( 1, 0xFFFF00 * Math.random() * 256 );\r\n\t\t\t_connectLiner.graphics.moveTo( a.x, a.y );\r\n\t\t\t_connectLiner.graphics.lineTo( b.x + _camImage.width, b.y + _camImage.height );\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t\t\r\n\t\t\/\/ --------- Draw Circle ------------------------------------------------ \/\r\n\t\tprivate function draw( target:Sprite, X:int, Y:int, S:int, R:int, C:uint, AX:int, AY:int ):void\r\n\t\t{\r\n\t\t\t\r\n\t\t\ttarget.graphics.beginFill( C, .05 );\r\n\t\t\ttarget.graphics.lineStyle( .5, C );\r\n\t\t\ttarget.graphics.drawCircle( X, Y, S );\r\n\t\t\ttarget.graphics.endFill();\r\n\t\t\t\r\n\t\t\ttarget.graphics.lineStyle( 1, 0x00FF00 );\r\n\t\t\ttarget.graphics.moveTo( X, Y );\r\n\t\t\ttarget.graphics.lineTo( X + AX, Y + AY );\r\n\t\t\t\r\n\t\t}\r\n\t\t\r\n\t}\r\n}\r\n<\/pre>\n<div class='wp_social_bookmarking_light'>        <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=https%3A%2F%2Fwww.digifie.jp%2Fblog%2Farchives%2F1051&t=Surf%20AS3%20%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='https:\/\/www.digifie.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>        <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"https:\/\/www.digifie.jp\/blog\/archives\/1051\" data-text=\"Surf AS3 \u3092\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\" data-via=\"LLC DigiFie\" data-lang=\"ja\">Tweet<\/a><\/div><\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>\u753b\u50cf\u304b\u3089\u7279\u5fb4\u70b9\u3092\u62bd\u51fa\u3059\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 Surf \u3092 AS3 \u306b\u79fb\u690d\u3057\u305f\u30e9\u30a4\u30d6\u30e9\u30ea OpenSurf Source from C++ to AS3 \u3068\u3044\u3046\u30e4\u30c4\u3092\u898b\u3064\u3051\u305f\u306e\u3067\u3061\u3087\u3063\u3068\u30c6\u30b9\u30c8\u3057\u3066\u307f\u307e\u3057\u305f\u3002 \u3061\u306a\u307f\u306b Surf  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,38],"tags":[],"_links":{"self":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1051"}],"collection":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/comments?post=1051"}],"version-history":[{"count":15,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1051\/revisions"}],"predecessor-version":[{"id":1068,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/posts\/1051\/revisions\/1068"}],"wp:attachment":[{"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/media?parent=1051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/categories?post=1051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.digifie.jp\/blog\/wp-json\/wp\/v2\/tags?post=1051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}