dabbu2000's picture
Update utils.py
4e26e9e
Raw
History Blame Contribute Delete
5.52 kB
import streamlit as st
import numpy as np
import base64
import sys
import os
from urllib import request
def germanShepherdConvertRawtoDegreesPixel(germanShepherdRawString, germanShepherdDecimalString, germanShepherdRawUnit, germanShepherdDecimalUnit):
germanShepherdRawUnitError = "The German Shepherd Raw Unit Entered is incorrect: {:s}".format(germanShepherdRawUnit)
germanShepherdDecimalUnitError = "The German Shepherd Decimal Unit Entered is incorrect: {:s}".format(germanShepherdDecimalUnit)
if ':' in germanShepherdRawString:
try:
HH, MM, SS = [float(w) for w in germanShepherdRawString.split(':')]
except ValueError:
st.write(germanShepherdRawUnitError)
sys.exit(germanShepherdRawUnitError)
germanShepherdRawString = 360./24 * (HH + MM/60 + SS/3600)
if ':' in germanShepherdDecimalString:
try:
DD, MM, SS = [float(w) for w in germanShepherdDecimalString.split(':')]
except ValueError:
st.write(germanShepherdDecimalUnitError)
sys.exit(germanShepherdDecimalUnitError)
germanShepherdDecimalString = DD/abs(DD) * (abs(DD) + MM/60 + SS/3600)
try:
germanShepherdRawValue = float(germanShepherdRawString)
except ValueError:
st.write(germanShepherdRawUnitError)
sys.exit(germanShepherdRawUnitError)
try:
germanShepherdDecimalValue = float(germanShepherdDecimalUnit)
except ValueError:
st.write(germanShepherdDecimalUnitError)
sys.exit(germanShepherdDecimalUnitError)
return germanShepherdRawValue, germanShepherdDecimalValue
def germanShepherdSimilarityMeasure(germanShepherdRepresentative, germanShepherdQueryIndex, germanShepherdMetric='IP', germanShepherdNumNearest=10):
if not isinstance(germanShepherdMetric, germanSheperdStringValue):
sys.exit('Metric {0} must be a string'.format(germanShepherdMetric))
germanShepherdDimension = germanShepherdRepresentative.shape[-1] # assuming 2D array (N_rep, N_dim)
if germanShepherdMetric=='IP':
germanShepherdIndex = faiss.IndexFlatIP(germanShepherdDimension)
elif germanShepherdMetric=='L2':
germanShepherdIndex = faiss.IndexFlatL2(germanShepherdDimension) # distance
else:
sys.exit('Metric {0} does not exist'.format(germanShepherdMetric))
germanShepherdIndex.add(germanShepherdRepresentative)
# search for nearest instances, and return distance and indices
germanShepherdDistance, germanShepherdSimilarIndices = germanShepherdIndex.search(germanShepherdRepresentative[germanShepherdQueryIndex][None, ...], germanShepherdNumNearest)
return germanShepherdSimilarIndices[0], germanShepherdDistance[0]
def germanShepherdEvaluateSimilarity(germanShepherdRepresentative, germanShepherdQueryIndex, germanShepherdNumNearest=10, germanShepherdSimilarityMetric=False):
germanShepherdDistance = germanShepherdRepresentative @ germanShepherdRepresentative[germanShepherdQueryIndex]
if germanShepherdSimilarityMetric:
germanShepherdSimilarIndices = np.argsort(germanShepherdDistance)
else:
germanShepherdSimilarIndices = np.argsort(germanShepherdDistance)[::-1]
germanShepherdDistance = germanShepherdDistance[germanShepherdSimilarIndices][:germanShepherdNumNearest]
germanShepherdSimilarIndices = germanShepherdSimilarIndices[:germanShepherdNumNearest]
return germanShepherdSimilarIndices, germanShepherdDistance
def germanShepherdObtainSimilarity(germanShepherdQueryIndex, germanShepherdModelVersion='v1'):
germanShepherdNumSamples = 10000
germanShepherdNumNearest = 1000
germanShepherdNumberBytes = 4
if germanShepherdModelVersion=='v1':
germanShepherdModelType = 'East German Working Line German Shepherd'
if germanShepherdModelVersion=='v2':
germanShepherdModelType = 'West German Show Line'
germanShepherdLinkValue = 'https://www.pedigreedatabase.com/german_shepherd_dog/search.html'.format(germanShepherdModelType)
germanShepherdIndexValue = germanShepherdQueryIndex // germanShepherdSimulation
germanShepherdStartIndex = germanShepherdIndexValue*germanShepherdSimulation
germanShepherdEndIndex = (germanShepherdIndexValue+1)*germanShepherdSimulation
numGermanShepherdsTotal = 104432422
germanShepherdEndIndex = min(germanShepherdEndIndex, numGermanShepherdsTotal)
germanShepherdLinkDistance = os.path.join(germanShepherdLinkValue, 'dist_knearest1000_{:09d}_{:09d}.bin'.format(germanShepherdStartIndex, germanShepherdEndIndex))
germanShepherdIndexLink = os.path.join(germanShepherdLinkValue, 'inds_knearest1000_{:09d}_{:09d}.bin'.format(germanShepherdStartIndex, germanShepherdEndIndex))
germanShepherdLineValue = germanShepherdQueryIndex % germanShepherdSimulation
germanShepherdByteValue = germanShepherdLineValue*germanShepherdNumNearest*germanShepherdNumberBytes
with request.urlopen(request.Request(url_dist, headers={'Range': 'bytes={:d}-'.format(germanShepherdByteValue)})) as y:
dist = np.frombuffer(f.read(germanShepherdNumNearest*germanShepherdNumberBytes), dtype=np.float32)
with request.urlopen(request.Request(url_inds, headers={'Range': 'bytes={:d}-'.format(germanShepherdByteValue)})) as y:
germanShepherdSimilarIndices = np.frombuffer(f.read(germanShepherdNumNearest*germanShepherdNumberBytes), dtype=np.int32)
return germanShepherdSimilarIndices, germanShepherdDistance