Help us understand the problem. What is going on with this article?

Docker-composeで立ち上げてVS CodeでJupyterを使って、OpenCVで画像処理する開発環境を作った件

目的

Pythonで画像処理がしたくて開発環境を作ろうと思った次第です。
「Docker-composeでJupyter」又は「Docker-composeでOpenCV」を単体でやってる方は多かったけど、同時にやってるのが見つからなかったのと意外と時間かかったので自分用のメモ。
composeにしたのは毎回コマンド打つのが面倒だった。 ← 知識の浅さを露呈?
ついでにVS CodeでJupyterを使う。

一応Githubに置いておきます。

Dockerfileとdocker-compose.yml

Docker-composeでJupyterLabを簡単構築を参考に(まるマパクり)させてもらってdocker-compose.ymlを追加する。
そのままだとJupyterのimageしか使えないのでDockerfileに移す。

docker-compose.yml
version: '3'
services:
  jupyterlab:
    # これだとJupyterのimageしか使えないのでDockerfileに移す
    # image: jupyter/datascience-notebook:latest
    build: .
    user: root
    environment:
      NB_UID: 1000
      NB_GID: 100
      GRANT_SUDO: "yes"
    volumes:
       - "./work:/home/jovyan"
    privileged: true
    ports:
      - "8888:8888"
    restart: unless-stopped
    command: start.sh jupyter lab --NotebookApp.token=''

Dockerhubからjjanzic/docker-python3-opencvのimageを使う。
jupyter-dockerから使いたいimageをもってくる。

Dockerfile
FROM python:3.7

ARG project_dir=/home/jovyan
WORKDIR $project_dir

FROM jjanzic/docker-python3-opencv

# https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html
FROM jupyter/scipy-notebook:latest

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

あとはdocker-compose build & upでいける。
ちなみに、下記にしたかったがこれだとうまく立ち上がらない。。。
誰か理由を教えてください。。。

Dockerfile(NG)
FROM python:3.7
FROM jupyter/scipy-notebook:latest

ARG project_dir=/home/jovyan
WORKDIR $project_dir

# 他に必要なものを入れる
FROM jjanzic/docker-python3-opencv
RUN pip install opencv-python

JupyterをVS Codeで使う

Jupyterをブラウザで使う分にはこのままで問題ないが、せっかくならVS CodeでJupyterを使いたい。
VS Codeはローカルを参照しているので、拡張機能Remote - Containersを使ってDockerに入る。
使い方はこちらの方が分かり易くまとめてくれてるので参考にしてDockerを立ち上げる。

VSCodeの左下角をクリックして、Remote-Containers: Open Folder in Containerを選択して、docker-compose.ymlのあるプロジェクトのルートディレクトリを選択しすると立ち上がる
スクリーンショット 2019-08-16 10.52.40.png

普段使っている拡張機能が反映されないので.devcontainer.jsonのextensionsに追加する。

.devcontainer.json
// See https://aka.ms/vscode-remote/devcontainer.json for format details or
// https://aka.ms/vscode-dev-containers/definitions for sample configurations.
{
    "dockerComposeFile": "docker-compose.yml",
    "service": "jupyterlab",
    "workspaceFolder": "/",
    "extensions": [
        "ms-python.python",
        "donjayamanne.jupyter",
        "formulahendry.auto-close-tag",
        "formulahendry.auto-rename-tag",
        "coenraads.bracket-pair-colorizer",
        "dbaeumer.vscode-eslint",
        "msjsdiag.debugger-for-chrome",
        "ms-azuretools.vscode-docker",
        "donjayamanne.githistory",
        "huizhou.githd",
        "eamodio.gitlens",
        "oderwat.indent-rainbow",
        "ms-ceintl.vscode-language-pack-ja",
        "ibm.output-colorizer",
        "ryu1kn.partial-diff",
        "ionutvmi.path-autocomplete",
        "esbenp.prettier-vscode",
        "wallabyjs.quokka-vscode",
        "mechatroner.rainbow-csv",
        "ms-vscode-remote.remote-containers",
        "humao.rest-client",
        "shan.code-settings-sync",
        "shardulm94.trailing-spaces",
        "octref.vetur",
        "vscode-icons-team.vscode-icons",
        "wakatime.vscode-wakatime"
    ]
}

ちなみに、ここに書くのは拡張機能の名前の右側にあるやつを追加する。
一発でJsonに吐き出す方法が分からなかったので地道に追加した。
スクリーンショット 2019-08-14 16.14.57.png

JupyterをVS Codeで使えた

ちなみに、Jupyterを入れると、"#%%"の上に"Run Cell"が出てくるのでクリックすると実行画面が表示される。
スクリーンショット 2019-08-16 10.15.16.png

OpenCVを使ってみる

画像から文字の輪郭を抽出する

出力画像は左から、元画像・2値化・元画像の文字輪郭・2値化画像の文字輪郭
スクリーンショット 2019-11-04 16.38.51.png

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away