Elixir를 사용하여 PNG 이미지를 RGBA 형식의 행렬로 변환하려고 합니다.

이전Inky pHAT이라는 E-페이퍼 디스플레이에 PNG 이미지를 표시하려다 벌어진 일이다.
Elixir에서 PNG 이미지를 픽셀로 변환하는 방법을 찾을 수 없어 까다롭다.
E-페이퍼 모니터에서 각 픽셀은 색상을 지정해야 합니다.
향후 학습을 위해 Elixir에서 PNG를 픽셀로 변환하는 방법에 대해 메모를 남깁니다.
Elixir로'Jupty Notebook+NumPy 빠른 이미지 가공의 김'을 만들어 봤어요. (레나 버전 업그레이드도 있어요)by@piacerex가 참고가 되었습니다.

"nerves inky phat weather example" 샘플 Nerves 펌웨어(졸작)
하고 싶은 일
  • 프로그래밍 언어: Elixir
  • PNG 아이콘 이미지를 RGBA 형식의 행렬로 변환하여 자유롭게 가공하고자 합니다.

  • 이 아이콘 이미지는 전자 종이 디스플레이 제조업체의 창고에서 직접 다운로드할 수 있습니다.
    IEx에서 데모
    IEx 시작
    iex
    
    종속성 설치
  • 환경 변수CROSSCOMPILE에 일부 값을 설정하지 않으면 성공적으로 컴파일할 수 없습니다pixels.(MacOS)
  • Mix.install([{:pixels, "~> 0.2.1"}, {:req, "~> 0.2.1"}, {:nx, "~> 0.1.0"}], system_env: [{"CROSSCOMPILE", "1"}])
    
    PNG 이미지 다운로드
  • 여기서 예를 들어 Pimoroni의 날씨 아이콘을 사용합니다.

  • HTTP 클라이언트Livebook 핵심 팀 추천를 사용하여 PNG 이미지를 다운로드합니다.
  • weather_icon = "https://raw.githubusercontent.com/pimoroni/inky/fc17026df35447c1147e9bfa38988e89e75c80e6/examples/phat/resources/icon-sun.png"
    %{body: png, status: 200} = Req.get!(weather_icon)
    
    PNG 이미지를 픽셀로 변환

  • req를 사용하여 PNG를 RGBA 형식의 행렬로 변환합니다.

  • pixels로 처리된 이미지는 RGBA의 4바이트로 1픽셀을 구성합니다.
  • {:ok, %{data: data, height: height, width: width}} = Pixels.read(png)
    
    그리고 원하는 방식으로 데이터를 가공합니다.
    data
    |> :binary.bin_to_list
    |> Enum.chunk_every(4)
    |> Enum.map(fn
      [_, _, _, 0] -> 0
      _ -> 1
    end)
    |> Enum.chunk_every(width)
    |> Nx.tensor
    |> Nx.to_heatmap
    
    pixels

    Elixir 커뮤니티를 처음 접하신 분들은 다음과 같은 것을 추천합니다.
    Elixir 커뮤니티의 걷기 - 국내 온라인 편-

    https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian

    좋은 웹페이지 즐겨찾기