Skip to content

Instantly share code, notes, and snippets.

@CarloLucibello
Created February 11, 2023 22:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CarloLucibello/51d713ec4a1612b46e6c90e53c0f88e8 to your computer and use it in GitHub Desktop.
Save CarloLucibello/51d713ec4a1612b46e6c90e53c0f88e8 to your computer and use it in GitHub Desktop.
arrow_image_dataset
using TestImages, Images, Arrow, ImageInTerminal
# img = testimage("cameraman")
# img = testimage("airplaneF16")
img = testimage("autumn_leaves")
_arrowname(::Type{Gray}) = Symbol("JuliaLang.Gray")
_arrowname(::Type{RGB}) = Symbol("JuliaLang.RGB")
_arrowname(::Type{RGBA}) = Symbol("JuliaLang.RGBA")
const str2type = Dict{String, Type}(
"N0f8" => N0f8,
"N0f16" => N0f16,
)
ArrowTypes.arrowname(::Type{Gray{T}}) where {T} = _arrowname(Gray)
ArrowTypes.arrowname(::Type{RGB{T}}) where {T} = _arrowname(RGB)
ArrowTypes.arrowname(::Type{RGBA{T}}) where {T} = _arrowname(RGBA)
ArrowTypes.arrowmetadata(::Type{Gray{T}}) where {T} = string(T)
ArrowTypes.arrowmetadata(::Type{RGB{T}}) where {T} = string(T)
ArrowTypes.arrowmetadata(::Type{RGBA{T}}) where {T} = string(T)
function ArrowTypes.JuliaType(::Val{_arrowname(Gray)}, ::Type{NamedTuple{names, types}}, meta) where {names, types}
# @show meta names types
T = str2type[meta]
return Gray{T}
end
function ArrowTypes.JuliaType(::Val{_arrowname(RGB)}, ::Type{NamedTuple{names, types}}, meta) where {names, types}
# @show meta names types
T = str2type[meta]
return RGB{T}
end
function ArrowTypes.JuliaType(::Val{_arrowname(RGBA)}, ::Type{NamedTuple{names, types}}, meta) where {names, types}
# @show meta names types
T = str2type[meta]
return RGBA{T}
end
function ArrowTypes.fromarrow(::Type{Gray{T}}, x::NamedTuple) where {T}
return Gray{T}(reinterpret(T, x.i))
end
function ArrowTypes.fromarrow(::Type{RGB{T}}, x::NamedTuple) where {T}
return RGB{T}(reinterpret(T, x[1].i), reinterpret(T, x[2].i), reinterpret(T, x[3].i))
end
function ArrowTypes.fromarrow(::Type{RGBA{T}}, x::NamedTuple...) where {T}
return RGBA{T}(reinterpret(T, x[1].i), reinterpret(T, x[2].i), reinterpret(T, x[3].i), reinterpret(T, x[4].i))
end
function write_arrowtable(file::AbstractString, table::NamedTuple; store_size=true)
extracols = []
if store_size
for (k, v) in pairs(table)
@assert v isa AbstractVector
if eltype(v) <: AbstractArray
if !(eltype(v) <: AbstractVector)
size_key = Symbol(k, "_size")
push!(extracols, size_key => size.(v))
end
end
end
end
return Arrow.write(file, (; table..., extracols...))
end
write_arrowtable("testarrow.arrow", (x=[img, img], y=[1, 2]))
read_arrowtable(file::AbstractString) = Arrow.Table(file)
a = read_arrowtable("testarrow.arrow")
a.x
reshape(a.x, size(img))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment