Skip to content

Instantly share code, notes, and snippets.

View shoz-f's full-sized avatar

Shozo Fukuda shoz-f

View GitHub Profile
@shoz-f
shoz-f / notebook.livemd
Last active January 26, 2022 02:18
単眼Depth推定 MiDaS in Elixir

試してみる Monocular Depth Estimation: MiDaS on Livebook

1.Prologue

職業柄、最近 Deep Learningを応用した単眼視深度推定(Monocular Depth Estimation)がとても気になっている。カメラのみを用いて深度(Z距離)測定する方法といえば、2台(二眼視)またはそれ以上(多眼視)のカメラを用いて三角測量を行うステレオ・ビジョンがポピュラーなのだが、単眼視とはなんともユニークで話ある。その仕組みと、どの程度現場で使えるモノなのかの感触を掴みたいと思っている。

ところで、先日Qiitaのある記事がきっかけで、拙作 cimg_exのデモを Livebook上に書いて動かしてみる機会があった。やってみると、これがまぁ Jupyter上での作文作業と同じく、Elixirコードの動作をリアルタイムに確認しつつその説明文を起こすことができ、とてもお手軽かつストレス・フリーな体験であった。

そんな訳で、Livebook上でちょこっと「単眼視深度推定」をデモってみようかと思い立ったのである。道具箱には、かれこれ2年ほど前から取り組んでいる TensorFlow liteの Elixir拡張モジュール tfl_interpとその取り巻き ― cimg_exなど ― が入っている。学習済みの tfliteモデルさえ入手できれば、Python不要でサクッとデモることができる筈だ。

@shoz-f
shoz-f / gist:3ebf1d09dc2a1a29997c81ea3d56c495
Last active January 11, 2022 11:54
「...サクッと画像加工するノリ」の猿まねをやってみた💦
# 「...サクッと画像加工するノリ」の猿まねをやってみた💦
## 1.はじめに
@piacerexさんのQuiika記事【「JupyterNotebook + NumPyでサクッと画像加工するノリ」をElixirでやってみた】
に触発されて、拙作の cimg_exでもやってみようと思い立った。要は猿まねである🐵
<!-- livebook:{"break_markdown":true} -->
まず最初に、Livebookのインストールならびに起動etc.に関しては、@piacerexさんの
@shoz-f
shoz-f / mpu9250.ex
Last active August 11, 2020 14:58
MPU-9250 MotionTracking device in Nerves/Elixir
defmodule Mpu9250 do
@moduledoc """
Documentation for Mpu9250.
Ref.
1) Lulu's blog/MPU-9250 and Arduino (9-Axis IMU)
https://lucidar.me/en/inertial-measurement-unit/mpu-9250-and-arduino-9-axis-imu/
2) Data sheet: https://strawberry-linux.com/pub/PS-MPU-9250A-01.pdf
3) Regs. map: https://strawberry-linux.com/pub/RM-MPU-9250A-00.pdf
4) AK8963 Data sheet: https://strawberry-linux.com/pub/AK8963.pdf
@shoz-f
shoz-f / stopwatchD.ex
Created October 1, 2018 12:16
Agentで実装
defmodule StopwatchD do
use Agent
import System, only: [ monotonic_time: 1 ]
@gclock __MODULE__
def activate() do
now = monotonic_time(100)
Agent.start_link(fn -> now end, name: @gclock)
@shoz-f
shoz-f / stopwatchC.ex
Created October 1, 2018 12:15
GenServerで実装
defmodule StopwatchC do
use GenServer
import System, only: [ monotonic_time: 1 ]
@gclock __MODULE__
def activate() do
now = monotonic_time(100)
GenServer.start_link(StopwatchC, now, name: @gclock)
@shoz-f
shoz-f / stopwatchB.ex
Created October 1, 2018 12:13
プリミティブなプロセスで実装
defmodule StopwatchB do
import System, only: [ monotonic_time: 1 ]
@gclock __MODULE__
def activate() do
now = monotonic_time(100)
pid = spawn(StopwatchB, :watch_loop, [now])
Process.register(pid, @gclock)
:ok
@shoz-f
shoz-f / stopwatchA.ex
Created October 1, 2018 12:12
基本のコード(純関数型)
defmodule StopwatchA do
import System, only: [ monotonic_time: 1 ]
def activate() do
now = monotonic_time(100)
{0, now}
end
def restart(last_time) do
now = monotonic_time(100)
@shoz-f
shoz-f / clock.ex
Created September 30, 2018 15:06
processとモジュール属性を活用したグローバル・クロック関数の実装
defmodule SFML.System.Clock do
@on_load :start_gclock
alias SFML.System.NIF
defdelegate create(), to: NIF, as: :clock_create
defdelegate release(c), to: NIF, as: :clock_release
defdelegate get_elapsed_time(c), to: NIF, as: :clock_get_elapsed_time
defdelegate restart(c), to: NIF, as: :clock_restart
defdelegate interval(c, wait), to: NIF, as: :clock_interval
@shoz-f
shoz-f / NifRes.tmpl
Created September 9, 2018 12:58
Erlang/Elixir NIFsのリソース・オブジェクトを扱うためのヘルパー・テンプレート(C++)
/*** File Header ************************************************************/
/**
* @file NifRes.tmpl
*
* Helper templates for handling NIFs resource object
* @author Shozo Fukuda
* @date Create: <%= $date; %>
* @date Modify: $Date:$
* System Window<br>
*
@shoz-f
shoz-f / eGraphics.cpp
Last active September 5, 2018 13:30
NIFsのリソースオブジェクトでSFMLのインスタンスを管理する
#include "stdafx.h"
#include <SFML/Graphics.hpp>
#include "erl_nif.h"
// sf::Drawable以下のクラス・オブジェクトを表すリソース型
ErlNifResourceType *SFML_DRAWABLE;
// リーダビリティUPのためのヘルパー
typedef sf::Drawable* DrawablePtr;