日本のコンテナハウスメーカーまとめ

コンテナベースだから設置するだけ、移動もできる新しい家の形。土地に対して一軒ずつ作るのとはちがって家ごと移動できるので精神的負担もなければ、構造的にも鉄骨なので強いという良いことだからけコンテナハウス。国内で施工できるメーカーをまとめてみました。

住宅向け

エアコン用ダクトの穴あけ可能なのかなど。

コンテナベース

screenshot

https://containerbase.jp/

1000万円台のローコスト住宅とうたっている。施工事例もあり解説記事も多く面白い。

クレイドルキャビン

screenshot

https://cradlecabin.com/%e3%82%b3%e3%83%b3%e3%83%86%e3%83%8a%e3%83%8f%e3%82%a6%e3%82%b9/

施工事例はビジネス向けや離れが多かったが、住居の施工事例があるということで住居化かと。

MovableProject

screenshot

https://felivehome.com/

中古コンテナを使った住宅を作るならここって感じ。在庫一覧というのがあって中古コンテナと値段が提示されていました。

アーススマート

screenshot

https://www.earthsmart.jp/

施工事例の画像がおおく住宅向けでした。

TETSUYA

screenshot

https://www.ih-tetsuya.com/

施工事例はないがモデルハウスを見れるとのこと。料金等ないのでイマイチ分からない。

店舗向け

富士重ハウス株式会社

screenshot

http://fhc-house.co.jp/

事務所向けかな。住宅はないようでした。

HACO:Ya

screenshot

http://haco-ya.jp/index.php

情報は少ないです。資料もダンロード停止中。

住たくeco工房

screenshot

http://www.juutakuecokoubou.com/

製品の中に木製コンテナハウスっていうのがあります。コンテナハウスのような家というキャッチコピーなので、鉄骨ではなさそうですね。

三協フロンテア

screenshot

http://www.sankyofrontier.com/

ビジネス向けで住宅向けではないですね。

山田設計

screenshot

http://yamada-arch.com/

ビジネス向けです。サイトが見やすい。

2040JP

screenshot

https://2040.jp/

施工事例が店舗がほぼです。ただ施工事例も多く良い。

BOX OF IRON HOUSE

screenshot

https://box-of-iron-house.com/

ビジネス向けですかね。資料請求できます。

株式会社デベロップ

screenshot

https://www.dvlp.jp/container/

ビジネス向け

その他

エスト・イノベーション

screenshot

https://www.est-i.net/container

情報が少なくよく、すぐには何を作っているのかわからなかった。実績がみたいな。

IDMobile Co.LTD

screenshot

https://www.idmobile.co.jp/

ビジネス店舗向け。実績を見ると賃貸住宅はやっていたようだ。

Rustでlazy_staticを使って正規表現を一回だけコンパイルする

何度も呼ばれる処理において毎度コンパイルするのではなく、一度だけ実行するにはこうする。スコープは今回こうなっているけど外に出すこともできます。

#[macro_use]

extern crate lazy_static;
extern crate regex;

use regex::Regex;

fn hello_check(text: &str) -> bool {
    lazy_static! {
        static ref PATTERN: Regex = Regex::new("hello").unwrap();
    }
    PATTERN.is_match(text)
}

fn main() {
    assert!(hello_check("hello world"));
    assert!(!hello_check("goodby world"));
}

https://docs.rs/regex/1.3.1/regex/

TypeScriptで読み取り専用のクラス定数を定義する

Javaで言うところの static final みたいなことがしたい。これはプロパティに対して readonlyとしてマークすることでできるみたい。

class Item {

  static readonly TAX: number = 0.10;

  constructor(public name: string, public price: number) {}

  private taxIncludedPrice() {
    return Math.ceil(this.price * Item.TAX)
  }

  info(): Object {
    return { name: this.name, price: this.price + this.taxIncludedPrice() }
  }
}

console.table([
  new Item("ガム", 100).info(),
  new Item("アメ", 200).info(),
  new Item("綿棒", 300).info()
]);

おなかすいたなあ

$ ts-node main.ts
┌─────────┬──────┬───────┐
│ (index) │ name │ price │
├─────────┼──────┼───────┤
│    0    │ 'ガム' │  110  │
│    1    │ 'アメ' │  220  │
│    2    │ '綿棒' │  330  │
└─────────┴──────┴───────┘

参考

UbuntuでPython3とOpenCV4を使って動体検知した時に動画を録画しローカルへ保存する

動体検知できた時に動画の撮影をして保存するコードを書いておきましたが、正直Pythonは学習して書いているわけではなくて、その都度ググってるに過ぎず、Python的に行儀良いのかわかりませんのでご了承くだせい。かなりのマニア以外は誰も読むことの無い記事なので大丈夫ですかな。

メモ

  • ラズパイは systemctl start ssh しないと外部からSSHで接続できないので、結局起動時は外付けディスプレイが必要だったということをここで書いておかないとまた忘れてディスプレイ無しでトライしようとして時間を消費してしまうので、ここに書いておきます。
  • motion に始まる監視カメラ用のパッケージありますが、負荷が大きく高画質なものを撮影することができませんので、OpenCVを使って自作することで、割りと低スペックな環境でも高画質な動画の撮影を目指しています。
  • 最終目標はここではないのですが、そろそろやる気が持続できなくなってきたので、後日再開する時に忘れないように、セーブポイント的に書いておきます。環境はUbuntuを利用します。

Ubuntuの設定

こんな感じで環境を設定しました。 opencv-python をインストールする時タイムゾーンが必要になりますので設定しています。言語設定を日本語に設定しているのは趣味です。

FROM ubuntu

RUN apt update && \
    apt install -y tzdata

ENV TZ Asia/Tokyo

RUN apt update && \
    apt install -y language-pack-ja && \
    update-locale LANG=ja_JP.UTF-8

ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8

RUN apt update && apt install -y python3 python3-pip

RUN pip3 install numpy
RUN pip3 install opencv-python

RUN apt update && \
    apt install -y python-numpy && \
    apt install -y libopencv-dev && \
    apt install -y python-opencv

RUN apt clean

RUN mkdir /save

ADD ./ /app

動体検知時の録画用スクリプト

このコード内では動体検知後に録画を開始し、3秒間猶予を設けています。3秒間の猶予の間に新たな動体検知を行った場合、この3秒は延長されます。したがってものが動き続けている限り動画撮影が行われ、最後の動きが停止してから3秒後に動画の撮影が停止します。

import cv2
import time

before_time = 0
delay = 3
video = None

def main():

    global video

    THRESHOLD = 300

    cam = cv2.VideoCapture(0)
    img1 = img2 = img3 = get_image(cam)

    while True:

        k = cv2.waitKey(30) & 0xff
        if k == 27: break

        diff = check_image(img1, img2, img3)

        cnt = cv2.countNonZero(diff)
        if cnt > THRESHOLD:
            video_start()
        else:
            video_end()

        if video is not None:
            video.write(img1)

        img1, img2, img3 = (img2, img3, get_image(cam))

    cam.release()
    cv2.destroyAllWindows() 

def video_start():
    global before_time
    global video

    if before_time == 0:
        print("開始")
        video = cv2.VideoWriter('/save/' + str(int(time.time())) + '.avi', cv2.VideoWriter_fourcc(*'XVID'), 30, (640, 480))

    before_time = int(time.time())

def video_end():
    global before_time
    global delay
    global video
    if before_time > 0 and before_time < int(time.time() - delay):
        print("終了")
        before_time = 0 
        video.release()
        video = None

def check_image(img1, img2, img3):

    gray1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY)
    gray2 = cv2.cvtColor(img2, cv2.COLOR_RGB2GRAY)
    gray3 = cv2.cvtColor(img3, cv2.COLOR_RGB2GRAY)

    diff1 = cv2.absdiff(gray1, gray2)
    diff2 = cv2.absdiff(gray2, gray3)

    diff_and = cv2.bitwise_and(diff1, diff2)

    _, diff_wb = cv2.threshold(diff_and, 30, 255, cv2.THRESH_BINARY)

    diff = cv2.medianBlur(diff_wb, 5)
    return diff

def get_image(cam):
    img = cam.read()[1]
    # img = cv2.resize(img, (600, 400))
    return img

main()

このコードは7割参考サイト郡のコードをつなぎ合わせたもので、それに対して私は動体検知時に録画をする処理を追加しました。この動体検知の部分を工夫したり比較頻度を落とすことで、負荷を下げることができるでしょう。音声は入っていないので、音声が必要な場合は別途処理が必要です。(このコード内で動画を撮影していますが、別の動画撮影プログラムを使って動画を作成するのもありかなとも考えています。)

動かし方

ビルドして main.py として保存したら上記のPythonスクリプトがADDされるようにしましょう。そして下記のようにしてrunし、bashなりで入ります。デバイスとして/dev/video0を欲しているので追加します。マウントに save ディレクトリを追加していますが、これはローカルから再生してファイルの状態を確認いしたからやっているので、マウントしなくても問題ありません。

docker run --device=/dev/video0 -v $HOME/path/to/camera/save:/save --rm -ti camera bash 

中に入ったら python3 /app/main.py とかでこれを起動すれば良いです。

DockerとしてはENTRYPOINTで実行されるのが望ましいですが、それをいうとGithubで一連のファイルをまとめて公開したほうがいいなどありますように、この記事の目的はやる気の失った筆者のセーブポイントであり、あくまで忘れないようにメモしているだけなのでゆるちてクレメンス。

参考