Como evitar que uma imagem consuma toda a memória da máquina no portal de upload de OCR?
O arquivo carregado tem apenas alguns megabytes, mas pode exigir muito mais memória do que o esperado após a decodificação. Imagens altamente compressíveis são particularmente propensas a julgamentos inválidos sobre tamanho de arquivo. O portal OCR precisa limitar o tamanho de bytes e pixels carregados, bem como a memória da camada de execução, o tempo e o orçamento de simultaneidade.
O arquivo carregado tem apenas alguns megabytes, mas após a decodificação pode ocupar muito mais memória do que o esperado. Imagens altamente compressíveis são particularmente propensas a invalidar julgamentos sobre o tamanho do arquivo, portanto, apenas observar o tamanho do arquivo não é confiável.
Este artigo foi escrito para desenvolvedores responsáveis por portais de upload, processamento de imagens ou integração de OCR. Quando terminar de ler, você entenderá por que precisa limitar bytes e pixels de upload, como definir um orçamento sem desativar a proteção da biblioteca e por que também precisa de memória, tempo e limites de simultaneidade da camada de execução.
Os valores de código e orçamento neste artigo são verificados usando amostras sintéticas. Eles apenas ilustram ideias de processamento e não representam uma garantia de todos os arquivos reais ou efeitos do produto. Antes de processar documentos importantes, guarde os originais e revise-os de acordo com os limites e itens de aceitação do texto.
Como evitar que a entrada de upload de imagens seja consumida? Conclusão de uma frase
Limite também o tamanho dos bytes e pixels carregados e defina orçamentos de memória, tempo e simultaneidade na camada de execução. Não olhe apenas para o tamanho do arquivo e não desative a proteção para eliminar avisos.
| sua situação | Práticas recomendadas | razão |
|---|---|---|
| Determine se o upload é seguro apenas com base no tamanho do arquivo | Limite o tamanho dos bytes e pixels carregados ao mesmo tempo | Arquivos de imagem altamente compressíveis são pequenos e ainda podem ocupar muito mais memória do que o esperado após a decodificação |
| Almofada avisa aviso de bomba de descompressão | Defina seu orçamento com base no seu negócio e identifique quais avisos devem ser elevados a rejeições | Definir MAX_IMAGE_PIXELS diretamente como None removerá uma importante linha de defesa |
| Precisa lidar com vários frames ou solicitações simultâneas | Aumente o número de frames, pixels acumulados, memória, tempo e limite de simultaneidade | Exemplos de quadro único não podem cobrir totais de vários quadros e picos de decodificação simultâneos |
| Desenhos legalmente grandes excedem o orçamento padrão | Siga um processo claro para arquivos grandes e informe aos usuários se os pixels ou bytes excedem o limite. | Ultrapassar o limite não significa arquivos ruins, os usuários precisam saber como ajustar |
Não desligue a proteção para eliminar avisos
Pillow possui um mecanismo de proteção de contagem de pixels contra possíveis bombas de descompressão. Definir MAX_IMAGE_PIXELS diretamente como None pode fazer com que o aviso desapareça, mas também remove uma importante linha de defesa. Os orçamentos devem ser definidos com base no negócio e deve ficar claro quais advertências são promovidas a rejeições.
Uma verificação de entrada protegida por biblioteca reservada
from io import BytesIO
import warnings
from PIL import Image
def inspect(raw, max_bytes=4096, max_pixels=1000):
if len(raw) > max_bytes:
raise ValueError("upload byte budget")
with warnings.catch_warnings():
warnings.simplefilter("error", Image.DecompressionBombWarning)
with Image.open(BytesIO(raw)) as im:
if im.width * im.height > max_pixels:
raise ValueError("pixel budget")
im.load()
return im.size
stream = BytesIO()
Image.new("RGB", (40, 30), "white").save(stream, format="PNG")
raw = stream.getvalue()
assert len(raw) < 4096
assert inspect(raw, max_pixels=1200) == (40, 30)
try:
inspect(raw, max_pixels=1000)
except ValueError as exc:
assert "pixel" in str(exc)
else:
raise AssertionError("pixel budget not enforced")
Os valores orçamentários servem apenas para testes sintéticos. Os exemplos tratam de quadros únicos e não cobrem totais de vários quadros, erros de codificador ou picos de decodificação simultâneos. A entrada formal também requer:
- Número de quadros e limites cumulativos de pixels
- Lidar com arquivos não confiáveis em um ambiente de execução isolado
Negar tem responsabilidades diferentes da quarentena
O limite superior de bytes carregados lida principalmente com cargas de rede e armazenamento, o limite superior de pixels de página única lida com riscos comuns de imagens grandes, os limites de memória e tempo restringem o consumo real de execução e o limite superior de simultaneidade controla o uso total de recursos.
Mas todo tipo de controle tem pontos cegos: o limite superior de bytes não pode substituir o julgamento da escala de decodificação, o limite superior de pixel de página única não pode ver a escala cumulativa de vários quadros, a memória e os limites de tempo também exigem feedback de erro explicável e o limite superior de simultaneidade requer a cooperação de filas e contrapressão.
Estouro de orçamento não é sinônimo de arquivos ruins
Desenhos legalmente grandes também podem exceder o orçamento padrão. Deve ser permitido passar pelo processo explícito de arquivos grandes, em vez de desligar silenciosamente todas as proteções.
Explique ao usuário se o limite excedido é de pixels ou bytes, para que ele saiba se deve cortar a página, reduzir a resolução de captura ou escolher um método de processamento especializado.
O portal de tradução deve indicar antecipadamente os riscos de entrada.
Adicionar sua própria pré-verificação de entrada antes da integração OmniDoc (portal de produtos) pode permitir que imagens grandes não suportadas recebam feedback mais cedo. O Preflight não pode substituir as próprias limitações da plataforma, nem deve fingir que a plataforma implementou as políticas deste artigo. É uma camada de segurança explicável que você cria entre o upload e a entrega.
Referências: Instruções de descompressão e proteção da imagem do travesseiro
📊 Comparação principal
| controlar | Principais limitações | Ainda preciso adicionar |
|---|---|---|
| Limite de bytes de upload | Carga de rede e armazenamento | escala de decodificação |
| Máximo de pixels por página | Riscos gerais comuns | Escala cumulativa de vários quadros |
| Memória e limites de tempo | Consumo real de execução | Feedback de erro explicável |
| Limite de simultaneidade | Uso total de recursos | Filas e contrapressão |
🎯 Qual método é adequado para você?
Se você é responsável pelo upload da entrada
Primeiro faça o limite duplo de bytes e pixels e depois adicione a memória, o tempo e o orçamento de simultaneidade da camada de execução.
Se você encontrar um aviso de bomba de descompressão de travesseiro
Não basta desligar o cheque. Defina o orçamento do seu negócio antes de decidir quais avisos serão encaminhados para rejeições.
Se você precisar lidar com vários frames ou solicitações simultâneas
Complemente o número de quadros, pixels acumulados, memória, tempo e limite superior de simultaneidade e coopere com fila e contrapressão.
Se seus usuários costumam enviar grandes desenhos de engenharia
Projete um processo claro de arquivos grandes para arquivos que excedem o limite e informe aos usuários se o limite foi excedido em pixels ou bytes.
❓ Perguntas frequentes (FAQ)
1. O arquivo enviado tem apenas alguns megabytes, por que ainda existe um risco?
A memória decodificada depende do tamanho da imagem, e imagens altamente compressíveis são particularmente propensas a avaliações inválidas do tamanho do arquivo.
2. MAX_IMAGE_PIXELS pode ser definido diretamente como Nenhum?
Não recomendado. Embora isso faça o aviso desaparecer, também remove uma importante linha de defesa do Pillow.
3. O valor do orçamento do exemplo pode ser usado diretamente no ambiente de produção?
não pode. O valor do orçamento serve apenas para testes sintéticos, a entrada formal também requer múltiplos frames e limites cumulativos de pixels, e lida com arquivos não confiáveis em um ambiente isolado.
4. As imagens grandes que excedem o orçamento devem ser rejeitadas diretamente?
A proteção não deve ser desligada silenciosamente. Desenhos legais de engenharia em grande escala podem seguir um processo claro de arquivos grandes e informar aos usuários se pixels ou bytes excedem o limite.
📝 Resumo
A segurança do portal de upload de OCR não pode depender apenas do tamanho do arquivo, mas também precisa ser limitada por pixels, bytes e orçamento da camada de execução. Somente definindo o orçamento, mantendo a proteção da biblioteca e explicando claramente aos usuários as razões para exceder o limite, a estabilidade e a disponibilidade poderão ser levadas em consideração.
Experimente agora: carregue o documento para iniciar a tradução, mantendo o layout original


