/** * Конструктор по умолчанию (параметризованный). * * @param cascadeName имя файла каскада Хаара. */ public HaarObjectDetectorParameters(String cascadeName) { this.cascadeName = cascadeName; cascade = HaarCascadeHelper.loadHaarCascade(this.cascadeName); if (cascade == null) { throw new RuntimeException(); } }
/** * Этот метод возвращает каскад Хаара в указанном масштабе. * * @param scale масштаб. * @return HaarCascade * <p>Метод старается использовать кеш. * <p>При выборе элемента из кеша используется точное сравнение масштаба. * <p>Если элемента с указанным масштабом нет, он создается и добавляется в кеш. * <p>todo Реализовать приближенное сравнение масштаба? */ public HaarCascade getHaarCascade(double scale) { for (CacheItem x : cache) { if (x.scale == scale) { return x.cascade; } } LOG.debug(String.format("Scale %f not found in cache!", scale)); final HaarCascade r = HaarCascadeHelper.scaleHaarCascade(params.cascade, scale); cache.add(new CacheItem(scale, r)); LOG.debug(String.format("Scale %f added.", scale)); return r; }