Я пытаюсь создать простое, но не тривиальное приложение с помощью Flask, и я постоянно сталкиваюсь с ситуацией, которая не очень хорошо объясняется в документации.
Я бы хотел, чтобы мое приложение было разделено между разными модулями, но похоже, что трудно получить доступ к основному объекту app
(или db
изflask-sqlalchemy
)из любого другого места, кроме основного модуля. Похоже, вам действительно нужно написать свой собственный способ обращения с ним как с глобальным, к которому все имеют доступ, что требует некоторого сомнительного кода и немного времени.
Как app
, так и db
создаются на уровне, где создается экземпляр основного приложения, и в каждом примере предполагается, что они доступны на верхнем уровне. Но если я разделю разные обработчики URL на разные модули, я потеряю возможность использовать декоратор @app.route
. Я могу обойти это с помощью app.add_url_rule('/...', some.module...)
, но опять же, приложение не передается этой функции.
То же самое происходит сdb
-Я не знаю, следует ли мне вставить его в g
или как-то сделать его доступным через app
. Это не помогает мне перемещать модели в отдельный модуль, хотя -, как мне получить доступ к db
при их импорте? Во всех примерах снова предполагается, что он доступен только как локальная переменная.
Я упускаю что-то очевидное, или я пытаюсь использовать flask для неправильной задачи?
-121 ---769500 -Я хочу применить преобразования твердого тела к большому набору матриц 2D-изображений. Идеально,Я хотел бы иметь возможность просто предоставить матрицу аффинного преобразования, указывающую как перевод, так и вращение, применить это за один раз, а затем выполнить интерполяцию кубического сплайна на выходе.
К сожалению, кажется, что affine_transform
в scipy.ndimage.interpolation
не выполняет перевод. Я знаю, что мог бы использовать комбинацию shift
и rotate
, но это довольно беспорядочно и требует многократной интерполяции вывода.
Я также пытался использовать общий geometric_transformation
вот так:
import numpy as np
from scipy.ndimage.interpolation import geometric_transformation
# make the affine matrix
def maketmat(xshift,yshift,rotation,dimin=(0,0)):
# centre on the origin
in2orig = np.identity(3)
in2orig[:2,2] = -dimin[0]/2.,-dimin[1]/2.
# rotate about the origin
theta = np.deg2rad(rotation)
rotmat = np.identity(3)
rotmat[:2,:2] = [np.cos(theta),np.sin(theta)],[-np.sin(theta),np.cos(theta)]
# translate to new position
orig2out = np.identity(3)
orig2out[:2,2] = xshift,yshift
# the final affine matrix is just the product
tmat = np.dot(orig2out,np.dot(rotmat,in2orig))
# function that maps output space to input space
def out2in(outcoords,affinemat):
outcoords = np.asarray(outcoords)
outcoords = np.concatenate((outcoords,(1.,)))
incoords = np.dot(affinemat,outcoords)
incoords = tuple(incoords[0:2])
return incoords
def rbtransform(source,xshift,yshift,rotation,outdims):
# source --> target
forward = maketmat(xshift,yshift,rotation,source.shape)
# target --> source
backward = np.linalg.inv(forward)
# now we can use geometric_transform to do the interpolation etc.
tformed = geometric_transform(source,out2in,output_shape=outdims,extra_arguments=(backward,))
return tformed
Это работает, но ужасно медленно, так как по существу зацикливается на пиксельных координатах! Как это сделать?