Conhecendo o IIIF — Padrões e ferramentas para publicação de imagens na web

Publicar imagens na web pode parecer algo simples e trivial. No entanto, quando trabalhamos com o universo de acervos digitais, seja de museus, bibliotecas, arquivos ou qualquer outro tipo de coleção bem estruturada, frequentemente nos deparamos com demandas mais sofisticadas.

Em alguns casos, podemos estar trabalhando com imagens em altíssima resolução, em outros podemos querer fazer anotações sobre as imagens, ou agrupar imagens que pertencem a um mesmo item, como as páginas de um livro, e exibi-las de maneira integrada.

Também podemos ter que pensar em uma infraestrutura para servir essas imagens para diversos fins, seja para apresentação no site da instituição, para a catalogação no acervo ou para que sejam reutilizadas pelo público em geral, mantendo sempre controle de acesso de acordo com a licença sob a qual cada imagem está publicada.

Para atender a estas demandas, cada instituição tem a necessidade de desenvolver infraestruturas tecnológicas mais complexas, robustas e caras. Além de gerar um constante retrabalho, já que cada instituição investe tempo e dinheiro em soluções muito similares, esta prática inviabiliza a interoperabilidade entre os acervos, com cada instituição adotando um padrão próprio.

A iniciativa IIIF surge como resposta a este problema. O nome vem da sigla em inglês para International Image Interoperability Framework (algo como Sistema Internacional para a Interoperabilidade de Imagens) e é pronunciada "triple eye eff" em inglês (existe uma proposta para que, em português, se diga apenas “if”). É difícil traduzir o termo “framework”, mas neste caso se refere a protocolos, padrões e ferramentas. A iniciativa se define como uma comunidade que desenvolve padrões (APIs), ferramentas (softwares) e publica conteúdo interoperáveis (imagens!).

A comunidade do IIIF conta com pessoas espalhadas por todo o mundo e é apoiada por um consórcio internacional de instituições, que orienta e garante a sustentabilidade do projeto. No Brasil, ainda são poucas as pessoas e instituições que discutem e experimentam com suas possibilidades. Aparentemente, o grupo mais avançado está na ECA/USP, já utilizando algumas ferramentas em seus acervos, e introduzindo o país na comunidade internacional, com a professora Sarah Lorenzon Ferreira fazendo parte da equipe do código de conduta.

Em maio deste ano tive a oportunidade de participar de um workshop sobre IIIF em Haia, na Holanda, como parte das atividades preparatórias da Europeana Tech Conference (veja relatos em português do evento por Dalton e Murilo), e como praticamente não há material sobre IIIF em português, decidi fazer esse artigo para apresentar a iniciativa. Sem entrar muito nos detalhes técnicos, pretendo explicar para que serve e quais são as vantagens de se adotar IIIF, ilustrando sempre com muitos exemplos. Espero que seja útil!


Servindo Imagens

A primeira camada proposta pelo IIIF é a API de imagens. Ela define padrões para um servidor entregar imagens por meio de um web service. Este padrão permite que, a partir de uma única imagem, preferencialmente em alta resolução, seja possível servir, sob demanda, recortes e versões para uso nas mais diversas situações.

Vamos entender como essas imagens podem ser acessadas. Talvez seja um começo um pouco técnico, mas isso é o que permite tudo o que veremos a seguir neste artigo.

Em um servidor que implemente os padrões do IIIF, você pode montar um endereço para acessar uma imagem, dependendo da maneira como você quer vê-la. Digamos, por exemplo, que você tenha uma imagem em altíssima resolução e você só precise de uma versão bem pequena dela, em miniatura. Ou, ainda, digamos que você queira apenas um recorte dessa imagem, de um tamanho específico para algum uso que você tenha. Você, através do endereço que montou, pode controlar tamanho, rotação, espelhamento, recorte e até a qualidade da imagem, inclusive optando por uma versão preto e branco, se for o caso. Veja este exemplo:

A partir de uma única imagem em seu servidor, é possível fazer requisições para várias versões diferentes, geradas sob demanda. O endereço para a última imagem, por exemplo, seria http://meuservidor.com/id-da-imagem/125,15,120,140/90,/!345/gray.jpg

No caso acima, o endereço da imagem é montado de maneira a retornar apenas um recorte da imagem. Em seguida, este recorte é reduzido para um tamanho de 90 pixels, espelhado, rotacionado e, finalmente, convertido em escala de cinza, tudo isso apenas montando a URL neste formato:

http://{seu servidor}/{identificador da imagem}/(recorte}/{tamanho}/{rotação}/{qualidade}.jpg

É como se existissem infinitas versões da sua imagem em seu servidor, todas elas disponíveis para serem acessadas a qualquer momento. Se essa estrutura ainda ficou um pouco abstrata para você, experimente entrar nesse link e brincar um pouco com as opções desse demo.

Ter um servidor como esses na sua infraestrutura já é uma vantagem por si só, pois evita que você tenha que ficar gerando cópias das imagens em diversas versões para diferentes usos, e te garante que você tenha apenas um local para guardar sua matriz. Além disso, esse padrão de URLs facilita a sua vida em caso de uma migração de sistemas, pois suas imagens ficariam em uma estrutura independente e poderiam ser utilizadas por qualquer software que você utilize para gerenciar seu acervo.

Zoom profundo

Uma das primeiras aplicações que podemos experimentar com um servidor como este é o zoom profundo. Como ele pode servir pedaços das nossas imagens dinamicamente, é possível que um visualizador de imagens com suporte a IIIF, como o Mirador ou o IIPMooViewer, exiba sua imagem com funcionalidades de zoom profundo.

Isso é possível porque ele pode recortar a imagem em diversos quadrados pequenos, e requisitá-los ao servidor apenas quando necessário. Dessa maneira, por mais que você tenha uma imagem em alta resolução, muito pesada para ser carregada de uma única vez, ela é apresentada de maneira rápida e ágil. Veja este exemplo para ter uma visão clara e didática de como isso funciona tecnicamente.

Aqui vemos um exemplo utilizando o visualizador IIPImage.

Do lado direito vemos a imagem completa com o destaque da área visível no zoom atual
Chegando um pouco mais perto
O nível máximo de zoom desta imagem permite enxergar até as rachaduras na pintura

Outro exemplo que vale a visita é este mapa japonês de 1837. O original possui mais de 5 metros de largura e 3 de altura, o que resultou em uma imagem digitalizada de de 1,27GB de tamanho.

Detalhe do mapa que tem dimensões de 34.342 x 22.939 pixels

Graças a esta técnica de zoom profundo, é possível navegar na imagem de maneira ágil, sem precisar fazer download ou processar um arquivo tão pesado.

Nessa primeira parte vimos como funciona a implementação da camada mais básica do IIIF, a API de imagens. Vimos como ela funciona e algumas aplicações básicas que ela proporciona.

Vale destacar algumas vantagens:

Apresentando as Imagens

Em uma segunda camada, o IIIF propõe a API de apresentação. Com ela você adiciona informações que vão enriquecer a exibição de suas imagens. Coisas como título, metadados, anotações, etc. Você também pode agrupar várias imagens em uma mesma exibição, por exemplo, se quiser agrupar todas as páginas de um livro digitalizado, para que se possa navegar em todas de uma vez só, ou se quiser, pode agrupar diferentes imagens de uma mesma obra para comparação, por exemplo uma foto de um quadro e sua imagem de raio-x.

Aqui vale ressaltar que a finalidade desta API de apresentação, e dos padrões IIIF como um todo, é apenas oferecer uma maneira de servir e exibir imagens de sua coleção. Em nenhum momento esse conjunto de ferramentas pretende substituir o seu sistema de gestão de repositório. A API de apresentação é um complemento a API de imagens, permitindo que uma ferramenta de visualização, como as que vimos anteriormente, possam construir uma exibição mais completa dos seus artefatos. Para uma boa introdução sobre o assunto, você pode ler este post de Tom Crane.

Vejamos alguns exemplos do que é possível fazer com esta API.

Metadados

Em primeiro lugar, a API de apresentação nos permite adicionar metadados às imagens. Enquanto a API de imagens sabe apenas informações sobre os pixels de uma imagem, a API de apresentação pode complementar isso com outras informações sobre o arquivo, como o título da obra, autor, link para o item em uma coleção digital, e o que mais acharmos relevante.

Imagem de uma página de livro com seus metadados. Crédito da imagem: Tom Crane

Como disse anteriormente, essas informações servem apenas para exibição. Elas não possuem qualquer semântica e não servem, por exemplo, para se fazer uma busca ou filtro de resultados. Isso tudo continua a cargo do sistema de gestão de repositórios já utilizado.

Isto é apenas o recurso mais básico, vamos dar uma olhada em alguns recursos mais avançados e veremos que a coisa vai ficar mais interessante.

Anotações

Exemplo de anotações sobre uma imagem. A caixa de texto traz as anotações relacionadas ao retângulo selecionado, em amarelo

Anotações permitem, basicamente, fazer marcações e comentários sobre as imagens. No exemplo acima, vemos uma imagem com uma série de retângulos desenhados sobre ela, e cada um deles contem um comentário associado.

Combinando, por exemplo, a possibilidade de se fazer anotações sobre as imagens com a possibilidade de se criar dinamicamente recortes da imagem, é possível extrair cada anotação como se fosse uma imagem independente, e mostrá-las em contextos diferentes.

Não deixe de ver este exemplo, chamado Storiiies, que propõe algumas maneiras muito simples e criativas de se contar histórias a partir das anotações.

Imagem recheada de anotações que serve como base para se contar uma história

A partir de uma imagem com uma série de anotações, contendo explicações sobre cada detalhe do quadro, são oferecidas algumas maneiras de se navegar por ela. Na imagem abaixo vemos um deles, um “tour virtual” sobre a pintura, onde se pode navegar pelas anotações do quadro.

Neste exemplo, o visitante navega pelas anotações a partir das setas para esquerda e para a direita. A cada nova anotação, ele navega pela pintura, dando zoom ou afastando, e é apresentado com um texto explicando aquele detalhe

Outro exemplo muito interessante de possibilidade de uso para as anotações é para crowdsourcing, ou seja, para convidar o público a ajudar na catalogação de seu acervo.

Um dos cartazes que compõe o projeto In the Spotlight, da British Library

Este recurso é utilizado pela British Library em sua plataforma LibCrowds. Nela, há uma série de projetos de crowdsourcing para diversas coleções. Em um deles, chamado “In the Spotlight”, os visitantes são convidados a identificar e transcrever o título de cartazes antigos.

Essas não são, nem de longe, todas as possibilidades, mas ilustram o potencial desse tipo de trabalho. Museólogos poderiam, por exemplo, utilizar o mesmo mecanismos para fazer anotações sobre o estado de conservação das obras, marcando lugares que precisam de restauro. As possibilidades são infinitas.

Livros e manuscritos

Exemplos de visualização de coleções de imagens que compõe um livro

Uma demanda recorrente ao apresentar imagens de um acervo é agrupá-las em coleções ou como parte de um documento único. O exemplo clássico disso são páginas de um livro digitalizado.

Com a API de apresentação, pode-se incluir várias imagens em uma mesma visualização. Como a demanda de livros e manuscritos é muito comum, alguns visualizadores já montam uma interface própria para navegação nesse tipo de documento.

Comparação de imagens

Além de agrupar imagens em uma mesma visualização, também é possível sobrepô-las e posicioná-las livremente na tela. Isso abre uma série de possibilidades, dentre elas a comparação entre imagens.

Animação retirada de apresentação de Claire Knowles (University of Edinburgh) e Glen Robson (IIIF) disponível em https://goo.gl/EoYvdt

Neste exemplo vemos o clássico "Garota com o chapéu vermelho", de Johannes Vermeer, digitalizado da maneira tradicional, com uma fotografia colorida e também com técnicas de raio-x e infravermelho. Ao posicionar as três imagens em um mesmo canvas, é possível criar visualizações próprias para a comparação.

Outras possibilidades

A página do manuscrito na BVMM com a ilustração recortada
A ilustração exposta no acervo da Biblioteca Nacional da França
O manuscrito reconstruído. Graças a interoperabilidade oferecida pelos padrões IIIF, unindo itens de dois acervos independentes

Esta possibilidade de posicionar mais de uma imagem em uma mesma camada de apresentação pode ter várias utilidades. Um exemplo muito bom, e que também mostra, na prática, o que a interoperabilidade entre acervos possibilita, é o caso das ilustrações deste manuscrito medieval francês.

Em algum momento na história, suas ilustrações foram recortadas e separadas de seus livros. Os originais, que fazem parte do acervo do BVMM (Bibliothèque Virtuelle des Manuscrits Médiévaux), apresentam os livros com esses buracos em suas páginas.

Mas as ilustrações não se perderam, e estão hoje sob a guarda da Biblioteca Nacional da França.

Como as duas instituições disponibilizam seus acervos utilizando os padrões IIIF, um projeto foi capaz de reconstruir os manuscritos, encaixando digitalmente as ilustrações no local de onde elas foram recortadas.

Ao lado vemos o manuscrito e uma das ilustrações, cada um em um acervo de uma instituição diferente. Na terceira imagem, vemos o livro reconstruído, a partir das imagens das duas instituições.

Busca e controle de acesso

Até aqui apresentamos as duas APIs principais e mais utilizadas por todas os acervos que adotam os padrões IIIF.

Ainda existem mais duas APIs complementares, que merecem seus próprios artigos e que apresento bem resumidamente aqui.

Exemplo de imagem em que as anotações trazem a transcrição via OCR

A primeira é a API de busca, que permite que se façam buscas nas anotações de uma imagem.

Seu uso mais óbvio é o de busca por palavras que foram transcritas de um documento a partir de um OCR, ou mesmo manualmente, mas pode ser utilizado para buscar conteúdos em quaisquer tipos de anotações.

A segunda é a API de autenticação. Com ela é possível controlar o acesso a imagens em seu repositório. Isso pode ser feito tanto restringindo totalmente o acesso a determinadas imagens ou servindo imagens em menor resolução para usuários anônimos ou sem as devidas permissões.

Considerações Finais

Espero que este artigo sirva como uma breve introdução para aqueles que estão tendo o primeiro contato com o IIIF. Há muitos outros exemplos e possibilidades de uso, assim como muitas outras razões e vantagens para adotá-lo, e para conhecer mais, sugiro que visitem o site do projeto, e acessem os canais de comunicação da comunidade. Seria muito interessante começar a fomentar uma comunidade brasileira (e lusófona) para trocar experiências!

Como palavra final, gostaria de reforçar que a comunidade IIIF, além de propor padrões, também desenvolve ferramentas que colocam esses padrões em prática. Isso faz com que optar por usar o IIIF traga uma dupla vantagem. Primeiro, fazer com que seu conteúdo entre em uma rede mundial de recursos interoperáveis, segundo, poder utilizar uma série de ferramentas prontas e reduzir muito o trabalho e o custo para montar seu repositório de imagens.