Python wrappers for native image filter libraries (CPU, CUDA, OpenACC).
Project description
myPyImageFilters
Resumen
- Propósito: Biblioteca Python que actúa como wrapper sobre librerías nativas (C/CUDA/OpenACC) para aplicar filtros de imagen (RGB->Gris, Gaussian Blur, Sobel).
- Ubicación: Código Python en
src/. Las librerías nativas compartidas deben estar en./bin/.
Estructura
src/: Contiene los wrappers Python:cpu_image_lib.py: wrapper parabin/libfiltersseq.so(implementación secuencial / CPU)cuda_image_lib.py: wrapper parabin/libfilterscuda.so(implementación usando CUDA)openacc_image_lib.py: wrapper parabin/libfiltersacc.so(implementación usando OpenACC / nvc)
bin/: Debería contener las bibliotecas compartidas.sogeneradas desde el código C/C++/CUDA/OpenACC.
Requisitos
- Python 3.x
ctypes(parte de la stdlib)- Bibliotecas nativas compiladas y colocadas en
./bin/:libfiltersseq.so(CPU)libfilterscuda.so(CUDA)libfiltersacc.so(OpenACC)
- Para CUDA: controlador NVIDIA y CUDA Toolkit instalados.
- Para OpenACC (nvc): NVIDIA HPC SDK (o compilador compatible) y runtime disponibles.
Compilación (resumen)
- Si el proyecto incluye un
Makefileen la raíz, prueba:
make
- Si no hay
Makefile, ejemplos genéricos de compilación (ajusta según fuentes reales):
# Compilar versión secuencial (C)
gcc -fPIC -shared -o bin/libfiltersseq.so src_c/*.c -I/path/to/include -lm
# Compilar versión CUDA
nvcc -Xcompiler -fPIC --shared -o bin/libfilterscuda.so src_cuda/*.cu src_c/*.c -I/path/to/include
# Compilar versión OpenACC (nvc)
nvc -acc -Minfo=accel -fPIC -shared -o bin/libfiltersacc.so src_openacc/*.c src_c/*.c -I/path/to/include
- Si usas
libfiltersacc.so, puede ser necesario exportarLD_LIBRARY_PATHpara encontrar dependencias en tiempo de ejecución:
export LD_LIBRARY_PATH=/opt/nvidia/hpc_sdk/Linux_x86_64/23.1/compilers/lib:$LD_LIBRARY_PATH
Uso (ejemplos)
- Ejemplo con la implementación CPU (
src/cpu_image_lib.py):
from src.cpu_image_lib import CPUFilterLib
lib = CPUFilterLib()
lib.rgb_to_gray('input.jpg', 'out_gray.jpg')
lib.gaussian_blur('input.jpg', 'out_blur.jpg', kernel_dim=5, stdev=2.0)
lib.sobel('input.jpg', 'out_sobel.jpg')
- Ejemplo con CUDA (
src/cuda_image_lib.py):
from src.cuda_image_lib import CudaImageLib
lib = CudaImageLib()
lib.rgb_to_gray('input.jpg', 'out_gray_cuda.jpg')
lib.gaussian_blur('input.jpg', 'out_blur_cuda.jpg', kernel_dim=7, stdev=2.0)
lib.sobel('input.jpg', 'out_sobel_cuda.jpg')
- Ejemplo con OpenACC (
src/openacc_image_lib.py):
from src.openacc_image_lib import OpenACCFilterLib
lib = OpenACCFilterLib()
lib.rgb_to_gray('input.jpg', 'out_gray_acc.jpg')
lib.gaussian_blur('input.jpg', 'out_blur_acc.jpg', kernel_dim=5, stdev=10.0)
lib.sobel('input.jpg', 'out_sobel_acc.jpg')
Detalles importantes (según wrappers)
-
Los wrappers usan
ctypesy esperan que las funciones C expongan estas firmas (según cada archivo):image2arr(const char *file)-> devuelveImage *(estructura CImage)saveImg(Image *img, const char *filename)-> voidfreeImage(Image *img)-> void (liberar memoria interna)rgb2gray(Image *image)->Image *GaussianBlur(Image *image, int kdim, float stdev)->Image *Sobel(Image *image)->Image *
-
Asegúrate de que los nombres de las funciones y la estructura
Imageen el código nativo coincidan con las expectativas del wrapper (CImage).
Solución de problemas
- Error
FileNotFoundErroral cargar.so: verifica que los archivos existan en./bin/y que las rutas sean correctas. OSErroral cargar la librería OpenACC/CUDA: compruebaLD_LIBRARY_PATHy que los runtimes (CUDA, NVIDIA libs) estén disponibles.- Fallos en tiempo de ejecución o corrupciones de memoria: puede indicar incompatibilidad en la definición de
struct Imageentre C y el wrapper; revísala cuidadosamente.
Siguientes pasos sugeridos
- Añadir un
examples/con scripts de prueba que usen cada backend. - Añadir un
MakefileoREADME_build.mdcon instrucciones de compilación exactas según las fuentes nativas.
Contacto / Licencia
- Añade aquí tu información de licencia o contacto si deseas compartir el proyecto públicamente.
Fin del README
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mypyimagefilters-0.1.2.tar.gz.
File metadata
- Download URL: mypyimagefilters-0.1.2.tar.gz
- Upload date:
- Size: 706.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
010743d0b21dd31c8513e7f17078509a64c31a822620dc34b4664c975091c4b2
|
|
| MD5 |
68b9564435aee4fccc6524dd6e017faf
|
|
| BLAKE2b-256 |
0baa38263fe0ef994f6c5d1d7aece303fadbabdcd0f2dd920c7da38536ea1f04
|
File details
Details for the file mypyimagefilters-0.1.2-py3-none-any.whl.
File metadata
- Download URL: mypyimagefilters-0.1.2-py3-none-any.whl
- Upload date:
- Size: 708.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fb3796960474688cb37c4ac639a74c11014535652acfe5d14b6c8d6f5825aa14
|
|
| MD5 |
50040c040b3126867662fbb13db5069b
|
|
| BLAKE2b-256 |
2a7b4a35f608775c8d5e1b2e5c7f1a5322400eea5aafbd4b7ebe535fe38f7318
|