mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-24 12:37:58 +01:00
53 lines
1.3 KiB
Elixir
53 lines
1.3 KiB
Elixir
defmodule Mix.Tasks.RecalculateIntensities do
|
|
use Mix.Task
|
|
|
|
alias Philomena.Images.{Image, Thumbnailer}
|
|
alias Philomena.ImageIntensities.ImageIntensity
|
|
alias Philomena.Batch
|
|
alias Philomena.Repo
|
|
|
|
import Ecto.Query
|
|
|
|
@shortdoc "Recalculates all intensities for reverse search."
|
|
@requirements ["app.start"]
|
|
@impl Mix.Task
|
|
def run(_args) do
|
|
Batch.record_batches(Image, fn batch ->
|
|
batch
|
|
|> Stream.with_index()
|
|
|> Stream.each(fn {image, i} ->
|
|
image_file =
|
|
cond do
|
|
image.image_mime_type in ["image/png", "image/jpeg"] ->
|
|
Thumbnailer.image_file(image)
|
|
|
|
true ->
|
|
Path.join(Thumbnailer.image_thumb_dir(image), "rendered.png")
|
|
end
|
|
|
|
case System.cmd("image-intensities", [image_file]) do
|
|
{output, 0} ->
|
|
[nw, ne, sw, se] =
|
|
output
|
|
|> String.trim()
|
|
|> String.split("\t")
|
|
|> Enum.map(&String.to_float/1)
|
|
|
|
ImageIntensity
|
|
|> where(image_id: ^image.id)
|
|
|> Repo.update_all(set: [nw: nw, ne: ne, sw: sw, se: se])
|
|
|
|
_ ->
|
|
:err
|
|
end
|
|
|
|
if rem(i, 100) == 0 do
|
|
IO.write("\r#{image.id}")
|
|
end
|
|
end)
|
|
|> Stream.run()
|
|
end)
|
|
|
|
IO.puts("\nDone")
|
|
end
|
|
end
|